首页 文章

数组中坐标之间的欧几里德距离

提问于
浏览
0

我用c#计算欧氏距离 .

Point[] points = new Point[100];

我有我在这个数组中创建的点的坐标 . 我想计算所有点之间的距离 .

for (int i = 1; i < k+1; i++)
 {

     X1 = points[i].X;
     X2 = points[i + 1].X;
     Y1 = points[i].Y;
     Y2 = points[i + 1].Y;
     result = Math.Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));

}

使用此代码,我计算了点之间的距离(例如:点a和b之间的距离,点c和d之间的距离等)但我无法计算点a和c或点b和b之间的距离想要计算此数组中所有点之间的距离 . 我怎么做?

4 回答

  • 0
    public void Euclidea()
            {
                double result;
                int X1,X2,Y1,Y2;
    
                for (int i = 1; i < k+1; i++)
                {
                    X1 = points[i].X;
                    Y1 = points[i].Y;
                    for (int j = 0; j < k; j++)
                    {
                        X2 = points[j + 1].X;
                        Y2 = points[j + 1].Y;
                        result = Math.Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));
                    }
                }
            }
    

    我输入这个代码解决了这个问题k = points.length()

  • 0

    你可能想要两次完成数组 .

    Point[] points = new Point[100];
    for(int i = 0; i < points.Length; i++)
        for (int j = points.Length - 1; j >= i; j--)
        {
            float distance = 0;
            if(i != j)
                distance = CalculateDistance(points[i], points[j]);
            // Do more stuff here
        }
    

    显然,你可以简单地运行两个相同长度的循环,但这会给你两次相同的结果 . 当 ij 具有相同的值翻转时( i = 10j = 15 和更高版本 i = 15j = 10 ),您可以执行相同的计算以获得相同的结果 . 为了防止我有我的第二个循环只运行大约一半的值不重做计算 .

    CalculateDistance方法与之前编写的代码完全相同,在我的例子中如下:

    private static float CalculateDistance(Point point1, Point point2)
    {
        float X1 = point1.X;
        float X2 = point1.Y;
        float Y1 = point2.X;
        float Y2 = point2.Y;
        return (float)Math.Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));
    }
    

    这样我就可以随时重复使用和重新排序计算,因为我只需要移动一行 . 请注意,您始终可以使用浮点数作为参数而不是本地数据,但我觉得这样会在此示例中使其更具可读性 .

    当距离相等时我也跳过了计算,因为比较了相同的值 .

  • 0

    你必须使用2 for循环来实现这一点 .

    你也想在某些地方保持这些点之间的欧氏距离 .

  • 1

    你必须使用2个循环 . 第一个循环将值赋给X1,第二个循环将值赋给X2 .

    这允许计算阵列中不连续的两个点之间的欧几里德距离 .

相关问题