确定三维空间中的最近邻居

时间:2017-03-23 19:27:49

标签: math

我试图找出三维空间中A点的最近邻居。 A点附近有几点。

我现在想知道哪一点最接近A点。

我可以计算A点到另一点的X,Y和Z的距离,但我不知道如何把它放到公式中。

假设A点的X坐标是与B点的X坐标不同的0个单位,而A点的Y坐标是与B点的不同的1个单位。 s Y坐标,A点的Z坐标与B点的Z坐标不同1个单位。

起初我认为我可以简单地将这三个差异加到一个距离变量的总和中,但是在点C的X差值为0的情况下,C的Y差值为0且C&#39 ; s Z差为2,我不知道B点或C点是否更接近A点。

有人可以分享他对这个问题的看法吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

三维空间中从A点到B点的距离计算如下:

distance = sqrt((b.x-A.x)^2+(B.y-A.y)^2+(B.z-A.z)^2)

要找到最小值,你必须迭代你的积分。可以说candidates是您想要找到最近邻居的点集。 Point邻居将是最接近四点a的点。

Point a = new Point(0,0,0);
Point neighbor = null;
int min = INTEGER.MAX_VALUE;
for(Point p : candidates){
     distance = sqrt((b.x-A.x)^2+(B.y-A.y)^2+(B.z-A.z)^2)
     if( distance < min){
         distance : min
         neighbor = p
     }
}

如果您不想返回距离值,则可以在不使用sqrt的情况下执行此操作,并节省此昂贵的操作。

答案 1 :(得分:1)

这已在math.stackexchange中得到解答: https://math.stackexchange.com/questions/42640/calculate-distance-in-3d-space

摘要:距离公式为Math.sqrt(dx*dx + dy*dy + dz*dz),其中dx,dy,dz是组件坐标差异。

要找到最小值,您不需要计算根,但仍需要对总和的分量求平方(因为a,b> 0:sqrt(a)&gt; sqrt(b)if a&gt; b)