球体上最近点到另一点

时间:2014-06-11 22:51:00

标签: java geometry implementation

给定一个球S(c,r)c为中心点(x,y,z)r为半径,有一个点p(x', y', z')位于内部或在S之外 我希望找到q点,q S|pq|最小。其中|pq|表示pq之间的欧几里德距离。

我尝试创建一条从c开始并经过p并找到光线与球体交点的光线。

然而,由于我为这个问题实现了Java代码,我无法一步一步地克服它。你能帮我吗?

1 个答案:

答案 0 :(得分:2)

您只需要对矢量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