方向向量轉歐拉角

最近需要通過方向向量轉換爲歐拉角,做個記錄

unity中,在世界座標系下,物體的旋轉次序是z x y,方向向量僅僅可以提供x和y方向的旋轉信息。方向向量(X,Y,Z)對應的歐拉角爲向量(0,0,1)即Z軸旋轉到(X,Y,Z)方向對應的歐拉角。C#下計算代碼爲


    public Vector3 LookRotation(Vector3 fromDir)
    {
        Vector3 eulerAngles = new Vector3();

        //AngleX = arc cos(sqrt((x^2 + z^2)/(x^2+y^2+z^2)))
        eulerAngles.x = Mathf.Acos(Mathf.Sqrt((fromDir.x * fromDir.x + fromDir.z * fromDir.z) / (fromDir.x * fromDir.x + fromDir.y * fromDir.y + fromDir.z * fromDir.z))) * Mathf.Rad2Deg;
        if (fromDir.y > 0) eulerAngles.x = 360 - eulerAngles.x;

        //AngleY = arc tan(x/z)
        eulerAngles.y = Mathf.Atan2(fromDir.x, fromDir.z) * Mathf.Rad2Deg;
        if (eulerAngles.y < 0) eulerAngles.y += 180;
        if (fromDir.x < 0) eulerAngles.y += 180;
        //AngleZ = 0
        eulerAngles.z = 0; 
        return eulerAngles;
    }

需要注意的是角度和弧度的互相轉換以及反三角函數的範圍以及歐拉角角度範圍的換算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章