Eigen 库中的 Transform::linear() return 是什么?
What does Transform::linear() return in the Eigen library?
使用 Eigen
C++ 库时,我无法理解 Transform::linear()
函数。根据文档,它 returns the linear part of the transformation
。但是,这是什么意思?肯定所有的矩阵变换都是线性的吧?
此外,从其他地方看到的一些示例来看,它的值 returns 似乎是一个 Eigen::Matrix3d
(或者可以隐式转换为 this)。对我来说,这表明它可能只返回转换的旋转部分,长度为 3(x、y 和 z)。但是,还有一个 Transform::rotation()
函数,根据文档 returns the rotation part of the transformation
.
有人可以向我解释一下 Transform::linear()
实际上 returns 是什么吗?
class Transform
表示使用齐次微积分的仿射变换或射影变换。例如,仿射变换 A
由线性部分 L
和平移 t
组成,因此通过 A
变换点 p
等同于:
p' = L * p + t
使用齐次向量:
[p'] = [L t] * [p] = A * [p]
[1 ] [0 1] [1] [1]
与:
A = [L t]
[0 1]
所以线性部分对应于齐次矩阵表示的左上角。它对应于旋转、缩放和剪切的混合。
遇到同样的问题,补充一下:
正如@ggael 所解释的那样,Transform::linear()
直接 return 变换矩阵中的线性部分。
Transform::rotation()
returns 线性部分中的旋转分量。但由于线性部分包含not only rotation but also reflection, shear and scaling,因此提取旋转并不直接,需要使用奇异值分解(SVD)进行计算。
在已知 仿射矩阵仅包含旋转和平移的常见情况下 然后 Transform::linear()
可用于有效访问旋转部分。
最后,如果将 Transform
的 Mode
模板参数设置为 Isometry
,Eigen 将只假设旋转和平移,并优化逆变换的计算。最新版本的 Eigen 也会在这种情况下优化 Transform::rotation()
,并直接 return 线性部分。但是请注意,没有等距仿射矩阵的紧凑版本,其中最后一行未存储并假定为 [0 ... 0 1].
使用 Eigen
C++ 库时,我无法理解 Transform::linear()
函数。根据文档,它 returns the linear part of the transformation
。但是,这是什么意思?肯定所有的矩阵变换都是线性的吧?
此外,从其他地方看到的一些示例来看,它的值 returns 似乎是一个 Eigen::Matrix3d
(或者可以隐式转换为 this)。对我来说,这表明它可能只返回转换的旋转部分,长度为 3(x、y 和 z)。但是,还有一个 Transform::rotation()
函数,根据文档 returns the rotation part of the transformation
.
有人可以向我解释一下 Transform::linear()
实际上 returns 是什么吗?
class Transform
表示使用齐次微积分的仿射变换或射影变换。例如,仿射变换 A
由线性部分 L
和平移 t
组成,因此通过 A
变换点 p
等同于:
p' = L * p + t
使用齐次向量:
[p'] = [L t] * [p] = A * [p]
[1 ] [0 1] [1] [1]
与:
A = [L t]
[0 1]
所以线性部分对应于齐次矩阵表示的左上角。它对应于旋转、缩放和剪切的混合。
遇到同样的问题,补充一下:
正如@ggael 所解释的那样,Transform::linear()
直接 return 变换矩阵中的线性部分。
Transform::rotation()
returns 线性部分中的旋转分量。但由于线性部分包含not only rotation but also reflection, shear and scaling,因此提取旋转并不直接,需要使用奇异值分解(SVD)进行计算。
在已知 仿射矩阵仅包含旋转和平移的常见情况下 然后 Transform::linear()
可用于有效访问旋转部分。
最后,如果将 Transform
的 Mode
模板参数设置为 Isometry
,Eigen 将只假设旋转和平移,并优化逆变换的计算。最新版本的 Eigen 也会在这种情况下优化 Transform::rotation()
,并直接 return 线性部分。但是请注意,没有等距仿射矩阵的紧凑版本,其中最后一行未存储并假定为 [0 ... 0 1].