0

クォータニオンの逆数を取得する方法を教えてください。

q-1=q'/(q*q')

q' = クォータニオン共役

(q*q') = クォータニオンのノルム * クォータニオンのノルム

私は四元数を持っています: (C言語)

quat.x = 0.0;
quat.y = 1.0;
quat.z = 0.0;
quat.w = 45.0;

最初のコンジュゲート:

quat.conjx =  0.0;
quat.conjy = -1.0;
quat.conjz =  0.0;
quat.conjw = 45.0;

次へ: ノルム

quat.norm = sqrt(quat.x*quat.x + quat.y*quat.y + quat.z*quat.z + quat.w*quat.w);

わかりましたが... C 構文を使用して逆数を計算するにはどうすればよいですか? これは正しいです?:

quat.invx = quat.conjx / (quat.norm*quat.norm);
quat.invy = quat.conjy / (quat.norm*quat.norm);
quat.invz = quat.conjz / (quat.norm*quat.norm);
quat.invw = quat.conjw / (quat.norm*quat.norm);

ご助力ありがとうございます

4

1 に答える 1

3

クォータニオンx +i y + j z + k wの共役は、 x --i y --j z -- kwとして定義されます。3つの別々のコンジュゲートはありません。normまた、クォータニオン構造に、、、、、などをinvx入れよinvyうとしないでくださいinvzconjx書くだけ:

typedef struct {
    double x;
    double y;
    double z;
    double w;
} quaternion;

次に、クォータニオンを引数として取り、それらを返す関数を記述します。たとえば、次のように記述します。

// Construct and return the conjugate of q.
quaternion q_conjugate(const quaternion q) { ...}
// Divide quaternion q by scalar d
quaternion q_divide(const quaternion q, const double divisor) {...}
// Compute the squared norm of q
double q_squared_norm(const quaternion q) {...}
// Compute the inverse of q
quaternion q_inverse(const quaternion q);
于 2013-03-15T05:35:46.090 に答える