C + OpenGL四元数

Jav*_*rez 2 c opengl quaternions

四元数是以下形式的数字:

a + bi + cj + dk
Run Code Online (Sandbox Code Playgroud)

对?好,但......

  1. 如何用C语言解释这个数字?

  2. 例如,我想旋转一个多维数据集乘以四元数?一个向量?

did*_*erc 6

对于你的第一个问题,我认为你的意思是"我如何代表",而不是"解释".

最简单的方法是使用struct:

typedef struct quaternion_t {
  double x,y,z,w;
} quaternion_t;
Run Code Online (Sandbox Code Playgroud)

请注意,如上所述,通常的做法也是使用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
Run Code Online (Sandbox Code Playgroud)

对于你的第二个问题,我建议你寻找一个关于该主题的好教程.同时,维基百科页面:

提供一个很好的介绍.