ユーザーが静的な球体の表面上を移動するオブジェクトを制御できるようにしたいと考えています。2 つのボタンを使用してオブジェクトの方向を時計回りと反時計回りに回転させ、小惑星のように常に前進します。
シーン キットには、SCNNode の 3 つの異なる方向プロパティがあり、どこから始めればよいかわかりません。球の周りの回転以外のすべてを実行する方法を理解しています。
ユーザーが静的な球体の表面上を移動するオブジェクトを制御できるようにしたいと考えています。2 つのボタンを使用してオブジェクトの方向を時計回りと反時計回りに回転させ、小惑星のように常に前進します。
シーン キットには、SCNNode の 3 つの異なる方向プロパティがあり、どこから始めればよいかわかりません。球の周りの回転以外のすべてを実行する方法を理解しています。
球面のパラメータ化を探しています。これはオンラインで見つけることができます (ただし、検索に入力する魔法の言葉がわからない場合は難しい場合があります)。MathWorldのエントリを確認してください。
s
球の表面は、 とと呼ばれる 2 つの角度変数によってパラメータ化されますt
。1 つの変数は 0 から 2 pi まで実行され、もう 1 つは 0 から pi までのみ実行されることに注意してください。これは見落としがちな落とし穴です。これらの角度を直角 (x、y、z) 座標に変換するには、次の式を使用します。
x = r cos(s) sin(t)
y = r sin(s) sin(t) // Yes it's sin(t) twice, that's not a typo.
z = r cos(t)
次のビジュアライゼーションが役に立ちます。平面 (たとえば、xy 平面) の曲線は、0 から pi までの角度をスイープし、半回転し、パラメーター に対応しますs
。pi/2 に等しく設定t
すると、sin(t) = 1 となり、x と y が円形セクションの標準直交座標にどのように変わるかがわかります。パラメータが半円をスイープした後、s
その半円を 0 から 2 pi まで回転させて完全な球体を形成できます。その完全なスイープはパラメータ に対応しますt
。
オブジェクトの位置を座標で表す場合(s, t)
、ほとんどの場合、上記の式を使用して直交座標に安全に変換できます。いずれのパラメータのドメインも気にする必要はありません。ただし、s
またはt
無制限に成長する場合 (たとえば、オブジェクトが長時間連続して周回するため)、パラメーターを正規化するためのわずかな追加の労力を費やす価値がある場合があります。非常に大きな入力に対する方法sin
や動作がわかりません。cos