我一直在研究这种转换背后的数学原理,目前为止,我所找到的最好的解释如下:
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
值应该只与垂直角度有关,而不是水平角度。 - RBarryYoung