旋转矢量以与另一个矢量达到正交性

时间:2012-04-15 11:18:27

标签: c++ geometry

我有2个向量(V1{x1, y1, z1}, V2{x2, y2, z2}),我想围绕 X轴 Y轴 Z-旋转V1V2平行。我想找到3个旋转角度。 我可以使用任何通用公式来找到它们吗?

2 个答案:

答案 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)。