如果我有一个点 (x,y,z) 如何将其投影到球体 (x0,y0,z0,radius) 上(在其表面上)。我的输入将是点和球体的坐标。输出应该是球体上投影点的坐标。
只需从笛卡尔坐标转换为球坐标?
如果我有一个点 (x,y,z) 如何将其投影到球体 (x0,y0,z0,radius) 上(在其表面上)。我的输入将是点和球体的坐标。输出应该是球体上投影点的坐标。
只需从笛卡尔坐标转换为球坐标?
对于最简单的投影(沿着将点连接到球体中心的线):
将点写在以球心 (x0,y0,z0) 为中心的坐标系中:
P = (x',y',z') = (x - x0, y - y0, z - z0)
计算这个向量的长度:
|P| = sqrt(x'^2 + y'^2 + z'^2)
缩放向量,使其长度等于球体的半径:
Q = (半径/|P|)*P
并更改回原始坐标系以获取投影:
R = Q + (x0,y0,z0)
基本上你想构建一条穿过球体中心和点的线。然后你将这条线与球体相交,你就有了你的投影点。
更详细地说:
让我们p
成为点,s
球体的中心和r
半径,那么您正在寻找的点x = s + r*(p-s)/(norm(p-s))
在哪里。x
实施留给您。
我同意球坐标方法也可以,但计算要求更高。在上面的公式中,唯一不平凡的操作是范数的平方根。
如果您将球体中心的坐标设置为系统的原点 (x0, y0, z0),它将起作用。因此,您将获得指向该原点的点的坐标(Xp',Yp',Zp'),并将坐标转换为极坐标,丢弃半径(球体中心与点之间的距离)和角度将定义投影。