(0、0、0)のような点と(x、y、z)のようなベクトルが与えられます。(0、0、0)を中心とする負のZ軸をこのベクトルの方向に向ける最も簡単な方法は何ですか?OpenGLを使用した例は歓迎されますが、必須ではありません。
fluffels
質問する
11803 次
5 に答える
14
座標フレームを回転させて特定の方向を指すには、さまざまな方法があります。それらはすべて、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 );
}
于 2008-10-11T12:43:47.223 に答える
1
私自身の質問に答えるために、私が思いついた最良の答えはこれです:
ベクトルを「コンポーネント」に分割します。xコンポーネントは、x軸に沿った変位です。三角法に目を向けると、cos(alpha)= x/vector_magnitudeになります。RHSを計算すると、アルファを導出できます。これは、y軸を中心に回転する必要がある量です。
次に、glRotatef()を一連呼び出すことにより、座標系をベクトルに合わせることができます。
于 2008-10-11T10:02:51.747 に答える
1
Diana Gruber の記事をご覧になることをお勧めします。
于 2009-07-06T13:42:02.063 に答える
0
このページには、「ベクトルをz軸に移動するための変換」というセクションがあります。これは、必要なもの、またはその逆のようです。
于 2008-11-05T20:05:17.327 に答える
0
座標の回転 (またはオブジェクトの回転、つまり同じこと) に関するリソースはたくさんあります。このサイトから、多次元でプログラミングする方法と、特にベクトルを操作する方法の両方について、多くのことを学びました
于 2008-10-11T19:44:22.803 に答える