我有两个任意形状。现在我想计算两个形状之间的最小距离。这里我附上图片
首先绘制部分完成。此形状是弧和线的组合。现在我在计算这些形状之间的最小距离时遇到问题。使用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的点集合。
有没有优化的方法来计算两个形状之间的距离?这种形状可以是任何地方和任何类型的形状。
而不是计算两组点之间的最小距离 我们可以通过计算线之间的距离来优化 线或线到弧或弧到弧。通过这种方式我们可以计算出来 优化方式的最小距离。
答案 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查找图像中所有点到第一个形状的距离。将结果与第二个形状相交。在生成的地图中找到最小非零值,这是您的最小距离。