代码之家  ›  专栏  ›  技术社区  ›  Rex

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

  •  -1
  • Rex  · 技术社区  · 9 年前

    我知道如何获得点之间的距离,但是我想获得两个对象之间的距离(每个对象都有几个点)。(请参见下图。)

    Illustration of My Problem

    我想根据物体A和物体B的点,用欧几里得距离计算它们之间的距离。

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

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

    2 回复  |  直到 9 年前
        1
  •  1
  •   ctst    9 年前
    • 也许最好的方法可能是(正如@Erica已经建议的那样)将距离作为最近点的距离之和,但请注意,这是 非对称的 ,因此不是数学家所说的真正的距离。为了获得对称性,您可以将其与其他对象的相同和相加,这将产生一个数学家距离方法。

    • 另一种方法是对点进行索引,并计算相同点的距离(当你知道时,总是有相同数量的点)。这有一个缺点,即具有不同索引的相同点是另一个对象(您可以用到根的距离来表示它,并逆时针表示相同的距离,以抵消该效果)。这也产生了数学家距离方法。

    第一个(一侧)的代码示例:

    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));
        }
    }
    
        2
  •  0
  •   M.You    7 年前

    试试这个方法:

        // 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;
    }