1、1.旋转角度已知旋转前向量为 P, 旋转后变为 Q。由点积定义可知:可推出 P,Q 之间的夹角为:2. 旋转轴旋转角所在的平面为有 P 和 Q 所构成的平面,那么旋转轴必垂直该平面。假定旋转前向量为 a(a1, a2, a3), 旋转后向量为 b(b1, b2, b3)。由叉乘定义得:所以旋转轴 c(c1, c2, c3)为:3. 罗德里格旋转公式3.1 公式已知单位向量 n , 将它旋转 角。由罗德里格旋转公式,可知对应的旋转矩阵根据旋转前后的两个向量值,使用上面的方法,先求出旋转角度和旋转轴,然后用罗德里格旋转公式即可求出对应的旋转矩阵。具体实现过程可以调用 Vector3 类,利用里面的
2、叉乘函数 crossProduct 计算出旋转前后向量的旋转轴:Vector3 rotationAxis = crossProduct( vectorBefore, vectorAfter)调用求向量模函数和 math.h 里的 acos 函数计算出旋转角度:Float rotationAngle = acos(vectorBefore * vectorAfter / vectorMag(vectorBefore) /vectorMag(vectorAfter)然后再利用上面的公式可求出旋转矩阵:rotatinMatrix00 = cos(angle) + u.x * u.x * (1 - c
3、os(angle);rotatinMatrix01 = u.x * u.y * (1 - cos(angle) - u.z * sin(angle);rotatinMatrix02 = u.y * sin(angle) + u.x * u.z * (1 - cos(angle);rotatinMatrix10 = u.z * sin(angle) + u.x * u.y * (1 - cos(angle);rotatinMatrix11 = cos(angle) + u.y * u.y * (1 - cos(angle);rotatinMatrix12 = -u.x * sin(angle) + u.y * u.z * (1 - cos(angle);rotatinMatrix20 = -u.y * sin(angle) + u.x * u.z * (1 - cos(angle);rotatinMatrix21 = u.x * sin(angle) + u.y * u.z * (1 - cos(angle);rotatinMatrix22 = cos(angle) + u.z * u.z * (1 - cos(angle);