如果我有一个点(x,y,z),如何将它投影到球体(x0,y0,z0,半径)(在其表面上)。 我的输入将是点和球体的坐标。 输出应该是球体上投影点的坐标。
只需从笛卡儿坐标转换为球坐标?
答案 0 :(得分:23)
对于最简单的投影(沿着连接点到球体中心的直线):
将点写在以球体中心为中心的坐标系中(x0,y0,z0):
P =(x',y',z')=(x - x0,y - y0,z - z0)
计算此向量的长度:
| P | = sqrt(x'^ 2 + y'^ 2 + z'^ 2)
缩放矢量,使其长度等于球体的半径:
Q =(radius / | P |)* P
然后更改回原始坐标系以获得投影:
R = Q +(x0,y0,z0)
答案 1 :(得分:4)
基本上你想构建一条穿过球体中心和点的线。然后,您将此线与球体相交,并获得投影点。
更详细:
让p
成为点,s
球体的中心和r
半径然后x = s + r*(p-s)/(norm(p-s))
,其中x
是您要寻找的点。实现由您自己完成。
我同意球面坐标方法也会起作用,但计算要求更高。在上面的公式中,唯一的非平凡操作是标准的平方根。
答案 2 :(得分:0)
如果将球体中心的坐标设置为系统的原点(x0,y0,z0),则此方法有效。因此,您将获得该原点的坐标(Xp',Yp',Zp'),并将坐标转换为极坐标,您将丢弃半径(球体中心与点之间的距离)和角度将定义投影。