给定一个球体 S(c,r)
,c
为中心点 (x,y,z)
且 r
是半径,有一个点 p(x', y', z')
位于 S
内部或外部。
我想找到 q
点,使得 q
位于 S
上,且 |pq|
最小。其中|pq|
表示p
和q
之间的欧几里得距离。
我尝试创建一条从 c
开始并穿过 p
的射线,并找到射线与球体的交点。
但是,由于我正在为这个问题实现Java代码,所以我无法一步一步解决它。你能帮我一下吗?
最佳答案
您只需标准化 vector p - c
,然后乘以 r
并加上 c
。
Vector v = p - c; // v.x = p.x - c.x, v.y = p.y - c.y, v.z = p.z - c.z
length = v.length; // = sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
v = v.normalize; //v.x = v.x / length , v.y = v.y / length, v.z = v.z / length
v = v * r // v.x = v.x * r , v.y = v.y * r, v.z = v.z * r
q = v + c // q.x = v.x + c.x, q.y = v.y + c.y, q.z = v.z + c.z
关于java - 球体上距离另一点最近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173889/