この変換の背後にある数学について多くの検索を行ってきましたが、これまでに思いついた最高のものは次のとおりです。
x = sin(horizontal_angle) * cos(vertical_angle)
y = sin(horizontal_angle) * sin(vertical_angle)
z = cos(horizontal_angle)
任意の角度の場合、これはうまく機能します。問題があるのは、回転の 1 つが 0 度の場合です。0 度 (または 180 度、360 度、または...) では、sin() はゼロになります。これは、他の角度に関係なく、上記の式から得られる x 座標と y 座標の両方がゼロになることを意味します。に設定されました。
特定の角度で台無しにならない、より良い公式はありますか? これまでの検索では見つかりませんでしたが、この問題には解決策が必要です。
更新: いくつかの実験の後、私の主な誤解は、球座標の極が垂直 (惑星の緯度と経度のように) であると想定していたのに、実際には水平である (画面に投影された) という事実であることがわかりました。これは、私が従来の 3D 環境ではなく、スクリーン スペース (スクリーンにマップされた x/y、スクリーンに投影された z) で作業しているという事実によるものでしたが、どういうわけかそれが要因になるとは思いませんでした。
極を正しく配置するために私が働いた最終的な式は次のとおりです。
x = cos(horizontal_angle) * sin(vertical_angle)
y = cos(vertical_angle)
z = sin(horizontal_angle) * sin(vertical_angle)