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

Math 确定三维空间中的最近邻,math,Math,我想找出三维空间中a点最近的邻居。 A点附近有几个点 我现在想知道哪一点离A点最近 我可以计算点A到另一点的X,Y和Z的距离,但我不知道如何将其转化为公式 假设点A的X坐标与点B的X坐标相差0个单位,点A的Y坐标与点B的Y坐标相差1个单位,点A的Z坐标与点B的Z坐标相差1个单位 起初我以为我可以简单地把这3个差加起来求一个距离变量的和,但是在点C的X差为0,点C的Y差为0,点C的Z差为2的情况下,我看不出点B或点C是否更接近点a 有人能分享一下他对这个问题的看法吗 谢谢。这已经在math.sta

我想找出三维空间中a点最近的邻居。 A点附近有几个点

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

我可以计算点A到另一点的X,Y和Z的距离,但我不知道如何将其转化为公式

假设点A的X坐标与点B的X坐标相差0个单位,点A的Y坐标与点B的Y坐标相差1个单位,点A的Z坐标与点B的Z坐标相差1个单位

起初我以为我可以简单地把这3个差加起来求一个距离变量的和,但是在点C的X差为0,点C的Y差为0,点C的Z差为2的情况下,我看不出点B或点C是否更接近点a

有人能分享一下他对这个问题的看法吗


谢谢。

这已经在math.stackexchange中得到了回答:

小结:距离公式是
Math.sqrt(dx*dx+dy*dy+dz*dz)
其中dx、dy、dz是组件坐标差


要找到最小值,不需要计算根,但仍然需要求和的各分量的平方(因为对于a,b>0:sqrt(a)>sqrt(b),如果a>b)

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

distance = sqrt((b.x-A.x)^2+(B.y-A.y)^2+(B.z-A.z)^2)
要找到最小值,必须迭代点。假设
candidates
是要查找最近邻居的点集。点邻居将是离四点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
     }
}
点a=新点(0,0,0);
点邻居=空;
int min=整数最大值;
(p点:候选人){
距离=sqrt((b.x-A.x)^2+(b.y-A.y)^2+(b.z-A.z)^2)
如果(距离<分钟){
距离:分钟
邻居=p
}
}

如果不想返回距离值,可以不使用sqrt就返回,并保存这个昂贵的操作

我投票结束这个问题,因为它是关于数学而不是编程的。还有一个问题,我投票结束这个问题,因为它不是关于编程或软件开发。只有当A点是
0/0/0
时,你的公式才是正确的。否则您必须计算
sqrt((b.x-A.x)^2+(b.y-A.y)^2+(b.z-A.z)^2)
添加了一个解释我现在明白了+1谢谢。请注意,如果只需要找到最小值,可以在解决方案中省略sqrt()。我通常将变量distanceSqared称为variable distanceSqared,以避免以后发生意外。当然,我在最后一句中提到过;)如果某些坐标为负,这有关系吗?我必须用特殊的方式威胁他们吗?不,你不必。此解决方案适用于所有坐标。(+/-)