zoukankan      html  css  js  c++  java
  • 欧拉角和四元数

    提出

    在 Unity 中 我使用了 transfrom.localEulerAngles.y 去获取旋转角度 y 的值,而并没有用 localRotation 这就涉及到了欧拉角(EulerAngles)和四元数(Quaternion)的概念。

    欧拉角(EulerAngles)

    百度百科说道,”欧拉角是用来唯一地确定定点转动明体位置的三个一组独立角参量,由章动角θ、进动角ψ和自转角φ组成,为L.欧拉首先提出,故得名。“

    在 Unity 中 EulerAngles 使用三个值(x,y,z)组成的旋转序列来表示角位移,这三个值分别绕三个相互垂直的轴(本地坐标轴)的旋转角度。

    XYZ 约定一:heading-pitch-bank 约定(来自网络)

    1. 先将物体坐标系与惯性坐标系重合
    2. heading 绕此时物体坐标系的 y 轴旋转
    3. pitch 绕 heading 旋转后的物体坐标系的 x 轴旋转
    4. bank 绕 heading-pitch 旋转后的物体坐标系的 z 轴旋转

    XYZ约定二:yaw-pitch-roll 约定 (来自《Unity 5 实践》)

    1. 先将物体坐标系与惯性坐标系重合
    2. yaw(偏航) 绕此时物体坐标系的 y 轴旋转
    3. pitch(偏角) 绕 heading 旋转后的物体坐标系的 x 轴旋转
    4. roll(侧滚) 绕 heading-pitch 旋转后的物体坐标系的 z 轴旋转

    四元数(quaternion)

    四元数是一个描述旋转的数学概念,强烈推荐去看一遍B站的一个视频【Numberphile数字狂】神奇四元数

    看完视频后,可以简单说,我们在一维空间(X轴)移动需要一个数,这个就是实数(1 or -1)。在二位空间(XY坐标轴)移动和旋转我们需要添加一个数,这个数就是复数i(i²=-1),进入三维空间(xyz坐标轴)移动和旋转我们就需要再添加两个数,构成的就是四元数ijk(i²=j²=k²=ijk=-1)。

    在 Unity 方面 Quaternion 是为了在旋转值之间插值,使得旋转看起来更平滑和自然。三维动画和游戏中常用四元数,如果是欧拉旋转(用xyz轴的转动角表示),转动的路径常常不是弧形,有时还会造成万向节锁,也就是无法旋转,四元数很好地解决了这个问题。

    总结

    localRotation 是一个四元数,而不是欧拉角,使用 EulerAngles 是为了让旋转更加容易理解,Unity 提供了欧拉角和四元数的自动转换,方便开发人员进行操作。

  • 相关阅读:
    sell -- js, 字符串去重,找到字符串中出现最多次数的字符,且输出多少次
    网络连接不了!
    sell -- js过滤敏感词
    动态绑定HTML
    web前端学习之HTML CSS/javascript之一
    web前端性能优化
    浅谈大型web系统架构
    应用越来越广泛的css伪类
    css3火焰文字样式代码
    7种html5css3网页图片展示特效代码
  • 原文地址:https://www.cnblogs.com/ZeroyiQ/p/12097441.html
Copyright © 2011-2022 走看看