四元数は、次の形式の数です。
a + bi + cj + dk
右?いいけど…
この数値を C 言語で解釈するにはどうすればよいですか?
たとえば、立方体を回転させたい場合、クォータニオンを掛けたものは何ですか? ベクター?
四元数は、次の形式の数です。
a + bi + cj + dk
右?いいけど…
この数値を C 言語で解釈するにはどうすればよいですか?
たとえば、立方体を回転させたい場合、クォータニオンを掛けたものは何ですか? ベクター?
最初の質問は、「解釈する」ではなく、「どのように表現するか」という意味だと思います。
最も簡単な方法は、次を使用することstruct
です。
typedef struct quaternion_t {
double x,y,z,w;
} quaternion_t;
上記で使用されているように、コンポーネント名に x、y、z、および w を使用することも通常の方法であることに注意してください (ただし、どれがどれであるかを知っている限り、任意の名前を付けることができます)。コンポーネントに倍精度浮動小数点数または単精度浮動小数点数を使用するかどうかは、ニーズ (精度またはスペース) によって異なります。
単純な操作は簡単に実装できます。
void conjugate(quaternion_t *q){
q->x = -q->x;
q->y = -q->y;
q->z = -q->z;
}
double product(quaternion_t *q1, quaternion_t *q2){
return q1->x * q2->x + q1->y * q2->y + q1->z * q2->z + q1->w * q2->w;
}
double norm(quaternion_t *q){
double p = product(q,q);
return sqrt(p);
}
// etc
2 番目の質問については、そのトピックに関する適切なチュートリアルを探すことをお勧めします。一方、ウィキペディアのページ:
良い紹介を提供します。
これを C と C++ のどちらでコーディングしても、計算はまったく同じになります。
詳細については、こちらを参照してください。
C/C++ の四元数ライブラリ http://en.wikipedia.org/wiki/Quaternion http://irrlicht.sourceforge.net/docu/classirr_1_1core_1_1quaternion.html https://irrlicht.svn.sourceforge.net/svnroot/irrlicht/トランク/インクルード/quaternion.h