在平行四边形内生成随机点
Generate random points inside a parallelogram
我需要编写一些代码,但我真的不知道从哪里开始。
首先我的输入是 4 个地理点 (lat, lon) (double)。
这 4 个点创建一个平行四边形。我需要一种方法:
- 以某种方式遍历由平行四边形组成的"matrix"。
- 如果点 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.
我需要编写一些代码,但我真的不知道从哪里开始。 首先我的输入是 4 个地理点 (lat, lon) (double)。 这 4 个点创建一个平行四边形。我需要一种方法:
- 以某种方式遍历由平行四边形组成的"matrix"。
- 如果点 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.