我试图找出三维空间中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点。
有人可以分享他对这个问题的看法吗?
谢谢。
答案 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)