我有两个3-D点。
实施例:计算2个三维点之间距离的算法?
float[] point1 = new float[3] {1.3919023, 6.12837912, 10.391283};
float[] point2 = new float[3] {48.3818, 38.38182, 318.381823};
任何一个算法来计算在这些点之间浮动的距离的想法?
我有两个3-D点。
实施例:计算2个三维点之间距离的算法?
float[] point1 = new float[3] {1.3919023, 6.12837912, 10.391283};
float[] point2 = new float[3] {48.3818, 38.38182, 318.381823};
任何一个算法来计算在这些点之间浮动的距离的想法?
两个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);
}
编辑:我更喜欢Zip
溶液贴通过下面的dasblinkenlight!
像2D但有一个更协调:
P1(x1, y1, z1); P2(x2, y2, z2)
d = SquareRootOf((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2));
显然不是在C#写下来,但你的想法。
如果您有两点:
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));
在C#中使用LINQ,你可以这样做:
var dist = Math.Sqrt(point1.Zip(point2, (a, b) => (a - b)*(a - b)).Sum());
钍将各个坐标之间的平方成对差值相加,并返回总和的算术平方根。
编辑:该解决方案适用于任何数量的维度大于或等于1(感谢Austin Salonen指出)。
非常好的n维解决方案 –
这看起来很棒单行:D你测试,以验证它的工作与否? – MonsterMMORPG
@MonsterMMORPG当“point1”和“point2”的大小匹配时,除了产生平方成对差之和的平方根外没有别的选择:-) – dasblinkenlight
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))
我们会让你尽快维基百科的停电结束认识。 – Nathan
如果社区无法在不使用谷歌搜索的情况下回答这个问题,那么这个世界就注定要失败。这让我想起:你为什么不谷歌这个? – Jon