それぞれの軸を中心に(x, y, z)
角度でポイントを回転させるにはどうすればよいですか?(rx, ry, rz)
つまり、回転角度による回転(x1, y1, z1)
の結果として生じるポイントをどのように決定するのですか?(x, y, z)
(rx, ry, rz)
これを実現する DirectX ルーチンはありますか?
あなたが求めているのは、回転を実行するためにオイラー角を使用する方法です。選択できる規則はいくつかありますが、Z 軸を中心に回転を適用し、次に Y を中心に回転させ、次に X を中心に回転させることに関心があるように見えます。
どこ
c1 = cos(rx) s1 = sin(rx)
c2 = cos(ry) s2 = sin(ry)
cs = cos(rz) s3 = sin(rz)
このアプローチにはいくつかの問題がありますが、最も一般的な問題の 1 つはジンバル ロックです。推奨されるアプローチは、角度軸定式化の 1 つを使用することです。それらの中で最も一般的な 2 つは、単位クォータニオン回転とオイラー・ロドリーグ回転行列です。これらを構成して、3 つの回転軸とそれらに関連付けられた回転角度を明示的に定義し、結果の回転表現を逆の順序で乗算して、回転するベクトルに適用することにより、12 のオイラー回転行列のいずれかを生成できます。
DirectX は、回転の実行にクォータニオンを使用します。
エレクトロニクス (EM) のクラスで、次の式を使用してデカルト座標を極座標に変換することを学びました。
x = r sinq cosf、y = r sinq sinf、z = r cosq
q はシータ、f はファイです。