首页 文章

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

提问于
浏览
1

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

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坐标都将为零 . 被设定为 .

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

Update: 经过一些实验,我发现我的主要误解是我假设我的球坐标的极点是垂直的(如行星上的纬度和经度),而它们实际上是水平的(投射到屏幕中) . 这是因为我认为这将是一个促成因素 .

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

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

2 回答

  • 1

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

  • 3

    正确的转换公式是:

    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
    

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

相关问题