zoukankan      html  css  js  c++  java
  • unity中的欧拉角


    unity中欧拉角用的是heading - pitch -bank系统(zxy惯性空间旋转系统):
    当认为旋转顺序是zxy时,是相对于惯性坐标系旋转。
    当认为旋转顺序是yxz时,是相对于物体坐标系旋转。

    另外一种常用的欧拉角系统是roll - pitch - yaw系统(zxy物体空间旋转系统),对于此系统:
    当认为旋转顺序是zxy时,是相对于物体坐标系旋转。
    当认为旋转顺序是yxz时,是相对于惯性坐标系旋转。

    ----
    万向锁:

    http://player.youku.com/player.php/sid/XNzkyOTIyMTI=/v.swf



    ----
    如下图,将x轴作为y轴的子节点,将z轴作为x轴的子节点。那么此装置属于哪种欧拉角系统?

    判断方法1:

    假设对此系统按yxz的顺序进行旋转,则:
    1,首先绕y轴旋转,子节点x,z轴会发生变化。
    2,再绕x轴旋转,由于上一步中x已发生变化,所以是绕变化后的x轴旋转。由于z轴是x轴子节点,所以z轴发生变化。
    3,再绕z轴旋转,由于前两步中z轴已发生变化,所以是绕变化后的z轴旋转。
    由此可见,按yxz顺序旋转的话,每一步都是在上一步变化后的基础上进行旋转,即每一步都是相对于当前物体坐标系进行旋转,所以此系统是“yxz物体空间旋转系统”,即正是unity所采用的欧拉角系统。
    判断方法2:

    假设对此系统按zxy的顺序进行旋转,则:

    1,首先绕z轴进行旋转,由于z轴是终端节点,所以x轴和y轴都不会发生变化。

    2,再绕x轴进行旋转,由于x轴在上一步旋转中没有发生变化,所以就等价于绕惯性空间的x轴旋转。由于y轴是x轴父节点,所以y轴不会发生变化。

    3,再绕y轴进行旋转,由于y轴在上一步旋转中没有发生变化,所以就等价于绕惯性空间的y轴旋转。

    由此可见,按zxy顺序旋转的话,每一步都等价于相对于惯性坐标系进行旋转,所以此系统是“zxy惯性空间旋转系统”,即正是unity所采用的欧拉角系统。
    ----

    下图列举出各种旋转顺序的“物体空间旋转系统”的万向锁情况:

    可见,万向锁就是:在指定旋转顺序下,绕第二轴旋转正或负90至使一三两轴平行或反向平行,一三两轴成了等效轴,于是物体由原来的可绕三个轴旋转变为只能绕两个轴旋转,丢失了一个旋转自由度。

    另外还还可以看到,当发生万向锁时,rotation所对应的欧拉角不唯一,如果一三两轴平行,则绕第一轴的旋转角A1和绕第三轴的旋转角A3之和不变即可保证rotation不变;如果一三两轴反向平行,则只要A1和A3之差不变,即可保证rotation不变。

  • 相关阅读:
    ubuntu安装jdk的两种方法
    LeetCode 606. Construct String from Binary Tree (建立一个二叉树的string)
    LeetCode 617. Merge Two Binary Tree (合并两个二叉树)
    LeetCode 476. Number Complement (数的补数)
    LeetCode 575. Distribute Candies (发糖果)
    LeetCode 461. Hamming Distance (汉明距离)
    LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
    LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)
    LeetCode 371. Sum of Two Integers (两数之和)
    LeetCode 342. Power of Four (4的次方)
  • 原文地址:https://www.cnblogs.com/wantnon/p/5908309.html
Copyright © 2011-2022 走看看