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

时间:2015-12-15 11:08:36

标签: java android algorithm location

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

  1. 浏览"矩阵"由parallelgram以某种方式形成。
  2. 如果第1点不可见,则在平行四边形内找到随机点。
  3. 提前致谢!

    编辑:

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

    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.
    

1 个答案:

答案 0 :(得分:1)

一种方法是在内部插入点。 假设你有i,j坐标(0 <= i,j <= 1)。现在你可以生成一条线。说你的paralelolgram是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来修复它,以便数字仍然有意义。
  • 这将遵循空间的曲率,因此如果平行四边形靠近其中一个极点,您将得到奇怪的结果,因为空间是如此扭曲。在这种情况下,您可以将点转换为单位球体上的3d点,应用相同的算法并将结果点重新投影到lat,long space。