欧拉角的万向锁

照我们的理解,两个轴的旋转就可以包含所有的旋转角度了。万向锁,其实就是一种旋转的特殊情况,再y轴旋转为90或-90度的时候,旋转x和z轴的效果是一样的,从而少了一种旋转轴,没有两个轴就不能表达出所有的旋转角度了。

using UnityEngine;
public class TestWXS : MonoBehaviour {

    float x = 0;
    float z = 0;
	
	void Update () {
        Resetpos();
        //x++;
        z++;
        transform.Rotate(0, 0, z);
        transform.Rotate(0, 90, 0);
        transform.Rotate(x, 0, 0);
    }

    private void Resetpos()
    {
        transform.position = Vector3.zero;
        transform.rotation = Quaternion.identity;
    }
}


代码中,无论是x++还是z++都是一样的固定在xy平面上旋转,不同只是方向不一样。缺失了对z轴的旋转。

在变换的矩阵中,y轴旋转变换固定为90或-90,那么矩阵就是一个固定的值,将对x,y,z的旋转矩阵进行左乘,得到:

blob.png

可以发现,这里缺失了对z顶点坐标旋转的变换影响。


首页 我的博客
粤ICP备17103704号