从两个变换的3D矢量中推导出3D旋转矩阵

时间:2017-02-03 17:06:43

标签: c++ matrix 3d glm-math

我目前正在尝试根据两对3D矢量(V1,V1 t 和<来强调推导出一个完整的旋转矩阵 R strong>(V2,V2 t )这样

  • V1 <子>吨 = R * V1
  • V2 <子>吨 = R * V2
  • 相互正交挑选V1和V2。

使用两对向量,因为一对向量(V1及其变换向量,V1 t )没有带来足够的信息来构造旋转矩阵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被视为彼此正交)
  • 如何从旋转矩阵中沿任意轴提取旋转?

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上,但我会稍微改变一下。

也许这样试试:

  • 从(V1,V1t)
  • 计算R1
  • 用R1旋转V2,结果为V2R
  • 从(V2R,V2t)
  • 计算R2
  • 连接R1和R2以获得最终轮换

它应该比尝试沿某个轴隔离旋转更容易。