旋转一个向量以达到与另一个向量的正交性
rotate a Vector to reach orthogonality with another vector
我(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
)。
相关文章:
- C++从另一个类访问公共静态向量的正确方法是什么
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 将一个向量插入另一个向量的某个位置
- 将指向给定子类的指针从一个向量复制到另一个向量
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 使用 std::transform 将向量向量 (a) 添加到另一个向量向量 (b)
- 如何按另一个向量的方向调整一个向量?
- 将字符向量复制到另一个向量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 如何避免将向量的完整值复制到另一个容器
- 如何将所有指针从一个向量移动到另一个向量?
- 如何从另一个向量中的另一个第一元素减去向量中的第一元素
- 用一个向量替换另一个向量的方法
- 如何根据另一个向量中给出的索引拆分向量?
- 如何在另一个类中调用类型类的向量?
- 按另一个向量对一个向量进行排序
- 具有多线程支持的 RenderClass,将函数调用推送到向量以在另一个线程上调用
- 如何设置一个 std::vector 与另一个,其中两个是不同类的向量?