Z軸をベクトルに合わせる最も簡単な方法は何ですか?
質問
(0、0、0)などの点と(x、y、z)のようなベクトルを指定します。 (0、0、0)を中心とする負のZ軸をこのベクトルの方向に向ける最も簡単な方法は何ですか? OpenGLを使用した例は歓迎されますが、必須ではありません。
解決
座標フレームを回転させて特定の方向を指すには、さまざまな方法があります。これらはすべて、z軸を希望する方向に向けたままにしますが、x軸とy軸の方向はさまざまです。
次のようにすると、回転が最短になりますが、これは必要な場合とそうでない場合があります。
vec3 target_dir = normalise( vector );
float rot_angle = acos( dot_product(target_dir,z_axis) );
if( fabs(rot_angle) > a_very_small_number )
{
vec3 rot_axis = normalise( cross_product(target_dir,z_axis) );
glRotatef( rot_angle, rot_axis.x, rot_axis.y, rot_axis.z );
}
他のヒント
をご覧ください。
自分の質問に答えるために、私が思いついた最良の答えはこれです:
ベクターを「コンポーネント」に分割します。 xコンポーネントは、x軸に沿った変位です。三角法に移ると、cos(alpha)= x / vector_magnitudeになります。 RHSを計算すると、アルファを導出できます。アルファは、y軸を中心に回転する必要がある量です。
その後、glRotatef()の一連の呼び出しにより、座標系をベクトルに合わせることができます
ページここには、セクションを移動するための変換" z軸へのベクトル」それ あなたが望むもの、またはおそらくその逆のようです。
所属していません StackOverflow