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

rotate a Vector to reach orthogonality with another vector

本文关键字:向量 另一个 旋转 一个      更新时间:2023-10-16

(V1{x1, y1, z1}, V2{x2, y2, z2}) 2 个向量,我希望V1围绕 X 轴、Y 轴和 Z 轴旋转以平行于 V2 我想找到 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);

并使用这些公式来获得您的欧拉角。

你真的需要旋转角度,还是你正在寻找的旋转矩阵。如果是后者,你可以按照OpenFOAM中的方式进行操作:http://github.com/OpenFOAM/OpenFOAM-2.1.x/blob/master/src/OpenFOAM/primitives/transform/transform.H#L45

请注意,在 OpenFOAM for vector 中,&运算符表示内积,^运算符表示叉积,*表示外积。sqr函数计算逐元素平方,magSqr vector大小的平方(即 v&v )。