4

(0、0、0)のような点と(x、y、z)のようなベクトルが与えられます。(0、0、0)を中心とする負のZ軸をこのベクトルの方向に向ける最も簡単な方法は何ですか?OpenGLを使用した例は歓迎されますが、必須ではありません。

4

5 に答える 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 に答える