【问题标题】:Converting 3D polar coordinates to cartesian coordinates将 3D 极坐标转换为笛卡尔坐标
【发布时间】:2013-12-25 04:20:00
【问题描述】:

我一直在对这种转换背后的数学进行大量搜索,到目前为止我能想到的最好的结果是:

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)

【问题讨论】:

  • 您的z 应该只取决于垂直角度,而不是水平角度。
  • 当你有(0,1,0)时,你丢失了horizo​​ntal_angle的信息

标签: math rotation polar-coordinates cartesian-coordinates


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正确的转换公式是:

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多