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

Posted

技术标签:

【中文标题】从两个变换的 3D 向量推导出 3D 旋转矩阵【英文标题】:Deducing a 3D rotation matrix from two transformed 3D vectors 【发布时间】:2017-02-03 17:06:42 【问题描述】:

我目前正在尝试根据两对 3D 向量 (V1, V1t)R 推导出一个完整的旋转矩阵 R强>(V2, V2t) 这样

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 被视为彼此正交) 如何从旋转矩阵中提取沿任意轴的旋转?

【问题讨论】:

【参考方案1】:

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

不妨试试这个方法:

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

这应该比试图隔离沿某个轴的旋转更容易。

【讨论】:

以上是关于从两个变换的 3D 向量推导出 3D 旋转矩阵的主要内容,如果未能解决你的问题,请参考以下文章

3D计算机图形学变换矩阵欧拉角四元数

给定 3D 旋转矩阵和 3D 方向向量求角度差

认识3D旋转变换矩阵

如何使用 3D 中的变换矩阵围绕 Z 轴旋转?

由正交矩阵构建的仿射变换矩阵求逆的快速算法

3d变换基础:平移旋转缩放(仿射变换)详解——公式推导