给定一个球S(c,r)
,c
为中心点(x,y,z)
且r
为半径,有一个点p(x', y', z')
位于内部或在S
之外
我希望找到q
点,q
S
,|pq|
最小。其中|pq|
表示p
和q
之间的欧几里德距离。
我尝试创建一条从c
开始并经过p
并找到光线与球体交点的光线。
然而,由于我为这个问题实现了Java代码,我无法一步一步地克服它。你能帮我吗?
答案 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