C++ 从两个变换后的三维矢量推导三维旋转矩阵

C++ 从两个变换后的三维矢量推导三维旋转矩阵,c++,matrix,3d,glm-math,C++,Matrix,3d,Glm Math,我目前正试图基于两对3D向量(V1,V1t)和(V2,V2t)推导出一个完整的旋转矩阵R,这样 V1t=R*V1 V2t=R*V2 V1和V2相互垂直拾取。 使用两对向量是因为一对向量(V1及其变换向量,V1t)不能提供足够的信息来构造旋转矩阵R。举例来说,V1位于R的旋转轴上就是一个很好的例子 其思想是建立两个部分旋转矩阵R1和R2,以获得最终矩阵R 该实现使用GLM,R1和R2的计算如下 R1 = math::mat3_cast(math::rotation(V1, V1t)); R2

我目前正试图基于两对3D向量(V1,V1t)(V2,V2t)推导出一个完整的旋转矩阵R,这样

  • V1t=R*V1
  • V2t=R*V2
  • V1和V2相互垂直拾取。
使用两对向量是因为一对向量(V1及其变换向量,V1t)不能提供足够的信息来构造旋转矩阵R。举例来说,V1位于R的旋转轴上就是一个很好的例子

其思想是建立两个部分旋转矩阵R1和R2,以获得最终矩阵R

该实现使用GLM,R1和R2的计算如下

R1 = math::mat3_cast(math::rotation(V1, V1t));
R2 = math::mat3_cast(math::rotation(V2, V2t));
我的猜测是,在计算R之前,沿轴V1的旋转应该与R2分离,给出R2'

R将是R1*R2’

我的问题是

  • 首先,从两对变换后的3D向量推导旋转矩阵是否可行?(将两个原始向量V1和V2视为彼此正交)
  • 如何从旋转矩阵中提取沿任意轴的旋转

你的思路是对的,但我想改变一下

或许可以这样尝试:

  • 从(V1,V1t)计算R1
  • 用R1旋转V2,结果为V2R
  • 从(V2R,V2t)计算R2
  • 连接R1和R2以获得最终旋转
这应该比尝试沿某个轴隔离旋转更容易