计算两个任意形状之间的最小距离

时间:2015-09-18 07:45:03

标签: java geometry

我有两个任意形状。现在我想计算两个形状之间的最小距离。这里我附上图片

enter image description here

首先绘制部分完成。此形状是弧和线的组合。现在我在计算这些形状之间的最小距离时遇到问题。使用GWT(java)html5 canvas绘制此形状。

为计算两个形状之间的最小距离,我在java中使用了以下代码,但我没有得到任何优化的方法 -

private double calculateMinimumDistance(Coordinate[] coordinates_1, Coordinate[] coordinates_2) { 
    double minDistance = 100000;
    double currentDistance = 0;

    for(int i = 0; i < coordinates_1.length; ++i) {
      for(int j = 0; j < coordinates_2.length; ++j) {
        currentDistance = coordinates_1[i].distanceTo(coordinates_2[j]);
        if(currentDistance < minDistance) {
          minDistance = currentDistance;
        }  
      } 
    }

    return minDistance;
}

coordinates_1包含形状点-1的集合 coordinates_2包含shape-2的点集合。

有没有优化的方法来计算两个形状之间的距离?这种形状可以是任何地方和任何类型的形状。

  

而不是计算两组点之间的最小距离   我们可以通过计算线之间的距离来优化   线或线到弧或弧到弧。通过这种方式我们可以计算出来   优化方式的最小距离。

4 个答案:

答案 0 :(得分:1)

这个想法是将形状表示为顶点列表。然后,为了找到任意形状之间的最小距离,我将实现基本算法以找到两个凸形之间的距离。然后将任意形状分割成不相交的凸形图集,计算不同对之间的所有距离并获得最小距离。

要计算两个凸形状之间的距离,只需迭代顶点对的所有组合,计算距离并取最小值。 当然,这种方法需要n ^ 2个操作,因此您可能需要对其进行优化。您可以使用一些简化形状的形状:例如,将每个形状表示为8-10个基本点形状,然后在每个形状上找到最接近另一个形状的边缘,然后在边缘点内搜索。

答案 1 :(得分:1)

将两个形状视为平面上两个不同的点集。 然后测量从第一组到第二组中每个点的距离。

为此使用嵌套for循环,并使用坐标几何的距离公式测量距离。

只存储最短距离,如果您希望两个点与距离一致。

答案 2 :(得分:1)

对于轮廓A和轮廓B中的每个点,使用距离公式计算斜边:hypot = sqrt(xA-xB)^ 2 +(yA-yB)^ 2)...我正在解决同样的问题对于一组N个轮廓,所以当我完成时我会分享我的代码。

答案 3 :(得分:0)

使用Imgproc.distanceTransform查找图像中所有点到第一个形状的距离。将结果与第二个形状相交。在生成的地图中找到最小非零值,这是您的最小距离。

相关问题