C + OpenGL 四元数

标签 c opengl quaternions

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

a + bi + cj + dk

对吧?很好,但是...

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

  2. 例如,如果我想旋转一个立方体 什么乘以四元数? vector ?

最佳答案

对于你的第一个问题,我认为你的意思是“我如何表示”,而不是“解释”。

最简单的方法是使用struct:

typedef struct quaternion_t {
  double x,y,z,w;
} quaternion_t;

请注意,如上所用,通常的做法是使用 x、y、z 和 w 作为组件名称(但您的命名完全可以接受,只要您知道哪个是哪个即可)。对组件使用 double 或单精度 float 取决于您的需求:精度或空间。

简单的操作很容易实现:

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 + OpenGL 四元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15375069/

相关文章:

c - signed 和 unsigned int 的整数转换等级

Java代码从四元数获取绕轴的旋转角度

rotation - 偏航、俯仰和横滚分别与航向、俯仰和倾斜相同吗?

c++ - 四元数到旋转矩阵,使用特征库的值不正确

c - GLUT 问题

C:传递二维数组的一维会导致段错误

c - 预编译标志优化

java - 相机如何制作?

opengl - 使用 OpenGL 实现更平滑的渐变过渡?

java - OpenGL 3 (LWJGL) LookAt 矩阵混淆