【问题标题】:how can i find the minimum distance between two or more polygons?如何找到两个或多个多边形之间的最小距离?
【发布时间】:2013-02-06 14:55:46
【问题描述】:

我想找到两个多边形之间的最小距离。但我有一些问题要找到它。我是谷歌地图的新手,你能帮帮我吗?我有这些坐标可以使用;

    polygonArray = [[
       new google.maps.LatLng(40.56389453066509,33.739013671875),
       new google.maps.LatLng(40.39676430557206,32.135009765625),
       new google.maps.LatLng(39.87601941962116,36.046142578125)
    ]];

提前谢谢你。

【问题讨论】:

    标签: java javascript google-api


    【解决方案1】:

    您需要一个几何库来计算两点之间的距离、多边形的中心等。看看这个other question

    【讨论】:

    • 这很好。不错。
    【解决方案2】:

    如果您决定编写自己的代码:

    对于 2 个不重叠的多边形,最简单的代码(从编程的角度来看)将遍历一个多边形的点并找到一个多边形中的每个点与第二个多边形中的每条线之间的距离,然后做同样的事情对于第二个多边形(每个点到每条线)。

    如果您不确定多边形是否重叠,您还必须检查一个多边形中的每条线是否不与第二个多边形中的任何其他线交叉(只需对 1 个多边形执行此操作)。

    【讨论】:

      【解决方案3】:

      下面的代码部分解决了这个问题,但仍然需要通过检测更接近另一个多边形的边缘上的点来增强,因为这部分只适用于顶点

              static double solve(List<List<Integer>> p, List<List<Integer>> q) {
              double minLength = 100000000;
              for (List<Integer> qq : q) {
                  for (List<Integer> pp : p) {
                      double current = distanceBTWPoints(pp, qq);
                      if (current < minLength) {
                          minLength = current;
                      }
                  }
              }
              System.out.println(minLength);
              return minLength;
          }
      
          static double distanceBTWPoints(List<Integer> p, List<Integer> q) {
              double xDiff = q.get(0) - p.get(0);
              double yDiff = q.get(1) - p.get(1);
      //        if(xDiff==0 || yDiff==0)
      //            return 0;
              System.out.println(+p.get(0) + "  " + q.get(0) + "  " + p.get(1) + "  " + q.get(1) + " x:" + xDiff + "  y: " + yDiff + " p: " + ((xDiff * xDiff) + (yDiff * yDiff)) + " VAl= " + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));
      //        System.out.println("p.get(0): "+p.get(0) +"  q.get(0) :"+q.get(0) +"  p.get(1):  "+p.get(1) +"  q.get(1): "+q.get(1) +" xDiff: " + xDiff + "  yDiff: " + yDiff + " plus: "+((xDiff * xDiff) + (yDiff * yDiff))+ " VAl= " + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));
              System.out.println("--" + Math.hypot(xDiff, yDiff));
              System.out.println("--" + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));
              return Math.hypot(xDiff, yDiff);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-03
        • 2020-02-15
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        • 2010-09-10
        相关资源
        最近更新 更多