四元素与矩阵之间相互转换
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 之间相互转换 | 数组类型 )