我知道如何获得点之间的距离,但是我希望获得两个对象之间的距离,其中每个对象有几个点。 (见下图。)
我想根据它们与欧几里德距离的点来计算物体A和物体B之间的距离。
我可以使用欧几里德距离来解决我的问题吗?
Java中的示例公式:Math.SQRT(Math.sqr(y2-y1)+ Math.sqr(x2-x1));
答案 0 :(得分:1)
最好的方法可能是(正如@Erica已经建议的那样)将距离作为最近点距离的总和,但要注意,这是 NOT SYMMETRIC ,因此数学家的方式不是真正的距离。为了获得对称,您可以使用另一个对象的相同总和来添加它,这将产生数学家距离方法。
另一种方法是对点进行索引并获取相同点的距离(当您知道时,总是有相同数量的点)。这有一个缺点,即具有不同索引的相同点是另一个对象(您可以指示它与根的距离和逆时针相同的距离以抵消该效果)。这也产生了数学家距离法。
第一个(一面)的代码示例:
double distance = 0;
for(Point x : A.getPoints()){
double distOfX = 0;
for(Point y : B.getPoints()){
double tempDist = Math.pow(x.getX()-y.getX(),2)+Math.pow(x.getY()-y.getY(),2);
distOfX = tempDist>distOfX?tempDist:distOfX;
}
distance += Math.sqrt(distOfX);
}
对于第二种情况(在指示之后):
double distance = 0;
if(A.getPoints().length != B.getPoints().length)
distance = -1;
else{
for(int i=0; i<A.getPoints().length; i++){
distance += Math.sqrt( Math.pow(A.getPoints()[i].getX()-B.getPoints()[i].getX(),2)+Math.pow(A.getPoints()[i].getY()-B.getPoints()[i].getY(),2));
}
}
答案 1 :(得分:0)
尝试这种方法:
// GET DISTANCE METHOD
//Calculate the distance between two points base on their coordinates
public float getDistance(float X_1, float Y_1, float X_2, float Y_2) {
//define the output distance
float Distance;
//calculate the distance
Distance = (float) Math.sqrt(Math.pow((X_1 - X_2),2) + Math.pow((Y_1 - Y_2),2));
//output the distance
return Distance;
}