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 提供了欧拉角和四元数的自动转换,方便开发人员进行操作。

  • 相关阅读:
    两种方法实现超出省略号效果
    CSS中定义优先权
    网页设计中字体设置详解
    JavaScript的方法和技巧
    手把手教你使用Gene6FTP远程管理
    用Zend Encoder加密PHP文件和PHP 优化配置
    JavaScript的方法和技巧
    SQL Server 2000订阅与发布的具体操作
    企业级邮件服务软件推荐
    用Zend Encoder加密PHP文件和PHP 优化配置
  • 原文地址:https://www.cnblogs.com/ZeroyiQ/p/12097441.html
Copyright © 2011-2022 走看看