Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数组中坐标之间的欧几里德距离_C#_Arrays_Point_Euclidean Distance - Fatal编程技术网

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

C# 数组中坐标之间的欧几里德距离,c#,arrays,point,euclidean-distance,C#,Arrays,Point,Euclidean Distance,我用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) * (

我用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之间的距离。我想计算此数组中所有点之间的距离。我如何做到这一点?

必须使用2 for循环才能实现这一点


此外,您还希望将这些点之间的欧几里德距离保持在某个位置。

您必须使用两个循环。第一个循环将值分配给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
    }
这样,我可以随时重复使用和重新排序我的计算,因为我只需要移动一行。请注意,您总是可以将浮点用作参数,而不是局部变量,但我觉得这种方式会使本例中的内容更具可读性

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

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=点。长度

您的代码需要做两件事:1选择两个点来计算它们之间的距离;2计算这些点之间的距离。听起来问题真的在第1部分,而不是第2部分。使这一点更清楚的一种方法是将距离计算分离为一种方法,例如,双计算点p1,点p2。然后你就可以把所有的事情都放在比较哪几点上。提示:您可能需要两个循环。我还建议使用基于0的计数器,因为这就是数组等在C中自然工作的方式。
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));
                }
            }
        }