将3D极坐标转换为笛卡尔坐标

时间:2013-12-25 04:20:00

标签: math rotation polar-coordinates cartesian-coordinates

我一直在搜索这种转换背后的数学问题,到目前为止我能想出的最好的是:

x = sin(horizontal_angle) * cos(vertical_angle)
y = sin(horizontal_angle) * sin(vertical_angle)
z = cos(horizontal_angle)

对于任意角度,这都可以。我遇到问题的地方是其中一个旋转是0度。在0度(或180度,或360度,或......)时,sin()将为零,这意味着无论其他角度如何,我从上述公式中得到的x和y坐标都将为零。被设定为。

那里有更好的配方,在某些角度不会搞砸吗?到目前为止,我的搜索还没有找到,但必须有解决这个问题的方法。

更新 经过一些实验,我发现我的主要误解是我假设我的球坐标的极点是垂直的(如行星上的纬度和经度),而它们实际上是水平的(投射到屏幕中)。这是因为我在屏幕空间工作(x / y映射到屏幕,z投影到屏幕上),而不是传统的3D环境,但不知何故不认为这将是一个促成因素。

最终公式对我来说是正确的方向:

x = cos(horizontal_angle) * sin(vertical_angle)
y = cos(vertical_angle)
z = sin(horizontal_angle) * sin(vertical_angle)

2 个答案:

答案 0 :(得分:3)

您的公式适用于所有角度。但是你给角度的名字可能并不完全正确。你所谓的“水平角度”是倾斜角度 - 矢量和z轴之间的角度。因此,如果“水平角度”为0,那么该点位于z轴上,这意味着x和y都是正确的。你所谓的“垂直角度”实际上是xy中的角度平面。如果它为0,则该点位于x-z平面中,因此y正确设置为0。

答案 1 :(得分:1)

正确的转换公式为:

x = r * sin(polar) * cos(alpha)
y = r * sin(polar) * sin(alpha)
z = r * cos(polar)

其中:

r     is the Radius
alpha is the horizontal angle from the X axis
polar is the vertical angle from the Z axis
x为零(或180,360等)时,

ypolar正确为零,因为垂直角度与这些值上的垂直Z轴对齐。同样,当alpha为零(或180,360等)时,水平角度与X轴对齐,因此y必须为零。当alpha为90(或270,450等)时,它与Y轴对齐,使x为零。