// 定义四元数类型。
typedef struct
{
float w;
float x;
float y;
float z;
}quaternion;
// 规范化四元数。
void quaternion_normalize(quaternion * q)
{
float norm_r = 1.0f / sqrtf(q-》w*q-》w + q-》x*q-》x + q-》y*q-》y + q-》z*q-》z);
q-》w *= norm_r;
q-》x *= norm_r;
q-》y *= norm_r;
q-》z *= norm_r;
}
// 四元数相乘
// left : 被乘数,输入。
// right : 乘数,输入。
// result : 积,输出。
void quaternion_mult(quaternion * result,const quaternion * left,const quaternion * right)
{
result-》w = left-》w * right-》w - left-》x * right-》x - left-》y * right-》y - left-》z * right-》z;
result-》x = left-》x * right-》w + left-》w * right-》x + left-》y * right-》z - left-》z * right-》y;
result-》y = left-》y * right-》w + left-》w * right-》y + left-》z * right-》x - left-》x * right-》z;
result-》z = left-》z * right-》w + left-》w * right-》z + left-》x * right-》y - left-》y * right-》x;
}
// 用四元数来旋转向量。
void quaternion_rotateVector(const quaternion * rotation,const float from[3],float to[3])
{
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !