四元素与矩阵之间相互转换

Posted mttnor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四元素与矩阵之间相互转换相关的知识,希望对你有一定的参考价值。

1.矩阵转换为四元素

public static Quaternion QuaternionFromMatrix(Matrix4x4 m)
        
            Quaternion q = new Quaternion();
            q.w = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] + m[1, 1] + m[2, 2])) / 2;
            q.x = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] - m[1, 1] - m[2, 2])) / 2;
            q.y = Mathf.Sqrt(Mathf.Max(0, 1 - m[0, 0] + m[1, 1] - m[2, 2])) / 2;
            q.z = Mathf.Sqrt(Mathf.Max(0, 1 - m[0, 0] - m[1, 1] + m[2, 2])) / 2;
            q.x *= Mathf.Sign(q.x * (m[2, 1] - m[1, 2]));
            q.y *= Mathf.Sign(q.y * (m[0, 2] - m[2, 0]));
            q.z *= Mathf.Sign(q.z * (m[1, 0] - m[0, 1]));
            return q;
        

2.矩阵的构成要素

public static Matrix4x4 CreateMatrix(Vector3 right, Vector3 up, Vector3 forward, Vector3 position)
        
            Matrix4x4 m = Matrix4x4.identity;
            m.SetColumn(0, right);
            m.SetColumn(1, up);
            m.SetColumn(2, forward);
            m.SetColumn(3, position);
            m[3, 3] = 1;
            return m;
        

3.四元素转化为矩阵

public static Matrix4x4 MatrixFromQuaternion(Quaternion q)
        
            return CreateMatrix(q * Vector3.right, q * Vector3.up, q * Vector3.forward, Vector3.zero);
        

 

以上是关于四元素与矩阵之间相互转换的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin集合操作 ④ ( Set 集合 | 可变 Set 集合 | List 与 Set 之间相互转换 | 数组类型 )

Kotlin集合操作 ④ ( Set 集合 | 可变 Set 集合 | List 与 Set 之间相互转换 | 数组类型 )

js 数组与字符串之间的相互转换

PHP基础——数据类型之间的相互转换

Python旋转矩阵与旋转向量的相互转换(OpenCV)

Python旋转矩阵与旋转向量的相互转换(OpenCV)