栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

四元数旋转代码如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四元数旋转代码如何工作?

最简短的总结是,四元数只是旋转矩阵的简写。4x4矩阵需要16个单独的值,而四元数可以表示4中完全相同的旋转。

对于数学上的偏见,我完全知道上述内容过于简化。

为了提供更多细节,让我们参考Wikipedia文章:

单元四元数提供了一种方便的数学符号,用于表示三维物体的方向和旋转。与欧拉角相比,它们的组成更简单,并且避免了万向节锁定问题。与旋转矩阵相比,它们在数值上更稳定,并且效率更高

从开头的一段不清楚,四元数不仅方便,而且很独特。如果对象具有特定方向,可以在任意数量的轴上扭曲,则存在一个表示该方向的唯一四元数。

再次,对于数学上的倾向,我上面的唯一性注释假定为右旋。 有一个等效的左手四元数沿相反的方向绕相反的轴旋转。

出于简单说明的目的,这是区别,没有区别。

如果您想制作一个简单的四元数来表示绕轴的旋转,则可以通过以下几步操作来达到目标​​:

  1. 选择旋转轴
    v = {x, y, z}
    。仅出于礼貌起见,请选择一个单位向量:如果长度尚未为1,则将所有分量除以v的长度。
  2. 选择一个您想绕此轴旋转的旋转角度并称为
    theta
  3. 等效单位四元数可以使用以下示例代码计算:

四元数构造:

q = { cos(theta/2.0),     // This is the angle component       sin(theta/2.0) * x, // Remember, angle is in radians, not degrees!      sin(theta/2.0) * y, // These capture the axis of rotation      sin(theta/2.0) * z};

请注意将这些除以2:将确保轮换中没有混乱。使用法向旋转矩阵,向右旋转90度与向左旋转270度相同。与这两个旋转等效的四元数是不同的:您不能将另一个混淆。

编辑:回应评论中的问题:

让我们通过设置以下参考框架来简化问题:

  1. 选择屏幕的中心作为原点(我们将围绕它旋转)。
  2. X轴指向右边
  3. Y轴指向上方(屏幕顶部)
  4. Z轴指向屏幕,指向您的脸部(形成漂亮的右手坐标系)。

因此,如果我们有一个示例对象(例如箭头),该对象从指向右侧(x轴正方向)开始。如果我们将鼠标从x轴上移,则鼠标将为我们提供正x和正y。因此,完成一系列步骤:

double theta = Math.atan2(y, x);// Remember, Z axis = {0, 0, 1};// pseudo pre for the quaternion:q = { cos(theta/2.0),     // This is the angle component       sin(theta/2.0) * 0, // As you can see, the zero components are ignored      sin(theta/2.0) * 0, // Left them in for clarity.      sin(theta/2.0) * 1.0};


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号