Quaternion.setFromRotationMatrix(matrix: Matrix4): Quaternion
该方法将矩阵转化为四元数。
matrix
:Matrix4
类型的矩阵,用于计算四元数。返回一个Quaternion
类型的对象。
const matrix = new THREE.Matrix4().makeRotationAxis( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 );
const quaternion = new THREE.Quaternion().setFromRotationMatrix( matrix );
通过将旋转矩阵转化为四元数,将三维旋转问题转换为四元数旋转问题,其核心算法如下:
假设旋转矩阵为 matrix
,构造四元数:
const quaternion = new THREE.Quaternion();
根据旋转矩阵中每个元素的值计算四元数的各个分量:
const te = matrix.elements;
const x = te[ 9 ] - te[ 6 ];
const y = te[ 2 ] - te[ 8 ];
const z = te[ 4 ] - te[ 1 ];
const w = Math.sqrt( 1.0 + te[ 0 ] + te[ 5 ] + te[ 10 ] ) / 2.0;
将上述分量设置到四元数中:
quaternion.set( x, y, z, w );
最后,将四元数归一化:
quaternion.normalize();
实际上,在计算过程中存在多种实现方式,以上仅为一种简单实现。