java编写一个解决方案来确定一个点是否位于多边形的内部(矩形)

时间:2012-01-26 13:01:24

标签: java android latitude-longitude

我正在website中阅读解决方案3(2D)并尝试将其转换为java代码。如果java是正确的,请评论。而不是x和y坐标,我使用纬度和经度坐标(注意:loc.getLongitude(),loc.getLatitude()是在矩形内部检查的点集合,给定坐标(double)不是真实坐标爱好。

        double lat0 = 0.2;
        double long0 = 0.3;
        double lat1 = 1.2;
        double long1 = 1.3;
        double lat2 = 1.2;
        double long2 = 1.3;
        double lat3 = 1.2;
        double long3 = 1.3;
        double rel1 = (loc.getLongitude()- long0)*(lat1 - lat0)- ((loc.getLatitude()-lat0)*(long1-long0));
        double rel2 = (loc.getLongitude()- long1)*(lat2 - lat1)- ((loc.getLatitude()-lat1)*(long2-long1));
        double rel3 = (loc.getLongitude()- long2)*(lat3 - lat2)- ((loc.getLatitude()-lat2)*(long3-long2));
        double rel4 = (loc.getLongitude()- long3)*(lat0 - lat3)- ((loc.getLatitude()-lat3)*(long0-long3));

        if (rel1 >= 0 && rel2 >= 0 && rel3 >= 0 && rel4 >= 0 )
        {
            try
            {
            ..........
                            ..........
            }
        else
        {
            .........

        }
        }

1 个答案:

答案 0 :(得分:1)

  1. 所有rel1..rel4必须具有相同的符号,基本上不是正面的,也许 - 都是负面的。
  2. 它仅适用于凸多边形。
  3. 我不知道在3D模型上使用2d算法是否公平(纬度和经度来自ploar坐标,不是吗?)。是的,在一般情况下,它会给出正确的结果,但在某些情况下,你需要处理这种情况,当线路连接两个点“在地球上”将不同,就像它在预测中一样。