【问题标题】:C + OpenGL quaternionsC + OpenGL 四元数
【发布时间】:2013-03-13 00:48:49
【问题描述】:

四元数是一个数的形式:

a + bi + cj + dk

对吗?很好,但是...

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

  2. 例如,如果我想旋转一个立方体 乘以四元数是多少?向量?

【问题讨论】:

标签: c opengl quaternions


【解决方案1】:

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

最简单的方法是使用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

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

提供一个很好的介绍。

【讨论】:

  • 我会选择双倍的,除非大小是个问题。
  • 非常感谢您的大力帮助朋友;-)
  • 没问题,问答案是否已经知道有什么意义。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多