在平行四边形内生成随机点

Generate random points inside a parallelogram

我需要编写一些代码,但我真的不知道从哪里开始。 首先我的输入是 4 个地理点 (lat, lon) (double)。 这 4 个点创建一个平行四边形。我需要一种方法:

  1. 以某种方式遍历由平行四边形组成的"matrix"。
  2. 如果点 1 不可行,请在平行四边形内找到随机点。

提前致谢!

编辑:

我的实际代码能够在矩形内迭代,这里是

while (!finished){
    if (actualLong> longitudMax){
        if(actualLat>latitudMax){
            //finish
            {... return;}
         actualLong = longitudMin;
         actuallat += adddistance;
     else{
         actualLong += addDistance;
     }



LongitudMin = minimum lon.
LongitudMax = maximum lon.
LatitudMin = minimum lat.
LatitudMax = maximum lat.

一种方法是在内部插入点。 假设您在内部有 i,j 坐标 (0 <= i,j <= 1)。现在您可以生成一条线。假设你的平行线图是 ABCD。然后你得到 L1 = A*i + B*(1-i)L2 = D*i + C*(1-i)(请注意,我交换了 C 和 D,因为你应该朝相同的方向前进)。那么里面的一个点就是X = L1 * j + L2*(1-j).

因此,如果你为你的 i 和 j 创建从 0 到 1 的循环,你应该在你的平行四边形内得到一个漂亮的网格。如果您想要随机点,只需生成 i 和 j 的随机值。

备注:

  • 你可以到外面去 [0,1] 但那会让你的点在平行四边形之外。
  • 对于 0 和 1,您将在平行四边形的边缘获得点,根据需要跳过或包含。
  • 这适用于任何 4 个点,但网格会倾斜以反映您的形状。
  • 由于您使用的是角度,因此在越过 0(从 2pi 变为 0)时要小心。您可以通过添加 2pi 或 360 来修复它,这样数字仍然有意义。
  • 这将遵循 space 的曲率,因此如果平行四边形靠近其中一个极点,您会得到奇怪的结果,因为 space 是如此扭曲。在这种情况下,您可以将您的点转换为单位球体上的 3d 点,应用相同的算法并将您的结果点重新投影到纬度,经度 space.