四元数是以下形式的数字:
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
对于您的第二个问题,我建议您寻找有关该主题的好教程。同时,维基百科页面:
提供一个很好的介绍。
无论您是用 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/主干/包括/四元数.h