我一直在大量研究这种转换背后的数学原理,到目前为止,我能想到的最好的方法是:
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,则该点位于z轴上,这意味着x和y都为0是正确的。您所说的“垂直角”实际上是xy中的角度飞机。如果为0,则该点位于xz平面中,因此y正确设置为0。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句