如何用欧几里德距离同时计算几个点之间的距离

时间:2016-02-02 12:50:47

标签: math statistics cluster-computing euclidean-distance

我知道如何获得点之间的距离,但是我希望获得两个对象之间的距离,其中每个对象有几个点。 (见下图。)

Illustration of My Problem

我想根据它们与欧几里德距离的点来计算物体A和物体B之间的距离。

我可以使用欧几里德距离来解决我的问题吗?

Java中的示例公式:Math.SQRT(Math.sqr(y2-y1)+ Math.sqr(x2-x1));

2 个答案:

答案 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;
}