计算2个三维点之间距离的算法?

时间:2012-01-18 17:37:35

标签: c#

我有两个三维点 例如:

float[] point1 = new float[3] {1.3919023, 6.12837912, 10.391283};
float[] point2 = new float[3] {48.3818, 38.38182, 318.381823};

有人想知道算法计算点之间的浮点距离吗?

5 个答案:

答案 0 :(得分:21)

两个3D点之间的欧几里德距离是:

float deltaX = x1 - x0;
float deltaY = y1 - y0;
float deltaZ = z1 - z0;

float distance = (float) Math.Sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ);

在N维(未经测试且易受溢出)中:

float DistanceN(float[] first, float[] second) {
  var sum = first.Select((x, i) => (x - second[i]) * (x - second[i])).Sum();
  return Math.Sqrt(sum);
}

修改:我更喜欢下面由dasblinkenlight发布的Zip解决方案!

答案 1 :(得分:17)

在使用LINQ的C#中,您可以这样做:

var dist = Math.Sqrt(point1.Zip(point2, (a, b) => (a - b)*(a - b)).Sum());

这总结了各个坐标之间的成对差异,并返回总和的算术平方根。

编辑:此解决方案适用于大于或等于1的任意维度(感谢Austin Salonen指出)。

答案 2 :(得分:10)

enter image description here

float distance=(float) Math.Sqrt(Math.Pow(point1[0]-point2[0],2) + Math.Pow(point1[1]-point2[1],2) + Math.Pow(point1[2]-point2[2],2))

答案 3 :(得分:4)

与2D相似,但又有一个坐标:

P1(x1, y1, z1); P2(x2, y2, z2)

d = SquareRootOf((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2));

显然没有用C#写下来,但你明白了。

答案 4 :(得分:2)

如果你有两点:
P1 =(x1,y1,z1)
P2 =(x2,y2,z2)
距离为SQRT((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)

所以你可以使用

float deltax = point2[0] - point1[0];
float deltay = point2[1] - point1[1];
float deltaz = point2[2] - point1[2];
float distance = (float) Math.Sqrt(
    (deltax * deltax) +
    (deltay * deltay) +
    (deltaz * deltaz));
相关问题