数组中坐标之间的欧氏距离

Euclidean distance between the coordinates in the array

我用c#计算欧式距离。

Point[] points = new Point[100];

我有我在此创建的点的坐标array.I想计算所有点之间的距离

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 我想计算这个数组中所有点之间的距离。我该怎么做?

你必须使用 2 个 for 循环来实现。

此外,您还希望在某处保留这些点之间的欧氏距离。

您必须使用 2 个循环。第一个循环为 X1 赋值,第二个循环为 X2 赋值。

这允许计算数组中不连续的两点之间的欧氏距离。

您可能想遍历数组两次。

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
    }

显然,您可以简单地 运行 两个等长的 for 循环,但这会给您两次相同的结果。当 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));
}

这样我就可以随时重用和重新排序我的计算,因为我只需要移动一行。请注意,您始终可以只使用浮点数而不是局部变量作为参数,但我觉得这种方式会使本例中的代码更具可读性。

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

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()