如何将两个四元数相乘

the*_*cat 8 php c++ 3d function quaternions

我有两个四元数,例如:

    w     x     y     z
1:  0.98  0.08  0.17  -0.01
2:  0.70  0.70  0.0   0.0
Run Code Online (Sandbox Code Playgroud)

我需要将它们相乘,得到第三个,其中包含所有旋转。

我如何在 PHP/C++/PAWN 中做到这一点?

Mik*_*our 7

您应该选择一种语言。在 C++ 中,Boost.Math 库包含四元数;我不知道你提到的其他语言。或者对于简单的乘法,您可以使用乘法表(我从维基百科复制):

*| 1  i  j  k
-------------
1| 1  i  j  k
i| i -1  k -j
j| j -k -1  i
k| k  j -i -1
Run Code Online (Sandbox Code Playgroud)

例如,给出 row和 columni*j中的值,即。ijk

所以,假设你的四元数代表w*1 + x*i + y*j + z*k,乘法就像

quaternion operator*(quaternion a, quaternion b) {
    return {
        a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z,  // 1
        a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y,  // i
        a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x,  // j
        a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w   // k
    };
}
Run Code Online (Sandbox Code Playgroud)

(注意:未经测试,并且可能充满拼写错误)。