如何将一个点投影到球面上

18
如果我有一个点(x,y,z),如何将其投影到一个球体(x0,y0,z0,半径)上(在其表面上)。 我的输入将是点和球的坐标。 输出应该是投影点在球面上的坐标。
只需将它从笛卡尔坐标系转换为球坐标系吗?

1
你如何投影这个点?连接点和球的中心?平行于某个轴?还是其他投影方式?此外,点和球的中心的(x,y,z)值是相同的吗,还是你只是使用了相同的变量名? - Ivaylo Strandjev
3个回答

36

对于最简单的投影(沿连接点与球心的直线):

  1. 将该点写成以球心为中心的坐标系(x0,y0,z0)下的形式:

    P = (x’,y’,z’) = (x - x0, y - y0, z - z0)

  2. 计算这个向量的长度:

    |P| = sqrt(x'^2 + y'^2 + z'^2)

  3. 将该向量缩放,使其长度等于球体的半径:

    Q = (radius/|P|)*P

  4. 然后切换回原始坐标系以获取投影:

    R = Q + (x0,y0,z0)


3
@George 把点直接放在球体表面,使其大小等于半径。 - Adam Erickson

7
基本上,您希望构建一条通过球心和点的线。然后,您将此线与球相交,便得到了投影点。
更详细地说:
p为点,s为球心,r为半径,则x = s + r*(p-s)/(norm(p-s)),其中x是您要寻找的点。具体实现由您完成。
我同意球坐标方法也可以解决问题,但计算量较大。在上述公式中,唯一需要进行的非平凡操作是求范数的平方根。

0

如果您将球体中心的坐标设置为系统的原点(x0,y0,z0),则它可以工作。因此,您将拥有相对于该原点的点的坐标(Xp',Yp',Zp'),并将坐标转换为极坐标,您会丢弃半径(球体中心和点之间的距离),角度将定义投影。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接