我有2个向量(V1{x1, y1, z1}, V2{x2, y2, z2})
,我想围绕 X轴, Y轴和 Z-旋转V1
轴与V2
平行。我想找到3个旋转角度。
我可以使用任何通用公式来找到它们吗?
答案 0 :(得分:3)
我会这样做:
A = V1xV2; //Cross product, this gives the axis of rotation
sin_angle = length(A)/( |V1| |V2|); //sine of the angle between vectors
angle = asin(sin_angle);
A_n = normalize(A);
现在你可以用角度和A_n构建一个四元数。
q = (A_n.x i + A_n.y j + A_n.z k)*sin(angle/2) + cos(angle/2);
并使用these公式来获取您的euler角度。
答案 1 :(得分:1)
你真的需要旋转角度,还是你正在寻找的旋转矩阵?如果是后者,你可以按照OpenFOAM中的方式完成:http://github.com/OpenFOAM/OpenFOAM-2.1.x/blob/master/src/OpenFOAM/primitives/transform/transform.H#L45
请注意,在vector
的OpenFOAM中,&
运算符表示内积,^
运算符表示叉积,*
表示外积。 sqr
函数计算元素方块,magSqr
vector
幅度的平方(即v&v
)。