Matrix Transform::linear()在Eigen库中返回什么? 使用特征>代码> C++库,我很难理解转换::线性()/函数。根据文档,它返回变换的线性部分。但这意味着什么?所有的矩阵变换都是线性的吗

Matrix Transform::linear()在Eigen库中返回什么? 使用特征>代码> C++库,我很难理解转换::线性()/函数。根据文档,它返回变换的线性部分。但这意味着什么?所有的矩阵变换都是线性的吗,matrix,linear-algebra,eigen,Matrix,Linear Algebra,Eigen,此外,从其他地方的一些示例来看,它返回的值似乎是一个特征::Matrix3d(或者可以隐式转换为该值)。对我来说,这表明它可能只返回变换的旋转部分,长度为3(x,y和z)。但是,还有一个Transform::rotation()函数,根据文档,该函数返回变换的旋转部分 有人能给我解释一下Transform::linear()实际返回的是什么吗?类Transform使用齐次演算表示仿射变换或投影变换。例如,仿射变换A由线性部分L和平移t组成,使得通过A变换点p相当于: p' = L * p +

此外,从其他地方的一些示例来看,它返回的值似乎是一个
特征::Matrix3d
(或者可以隐式转换为该值)。对我来说,这表明它可能只返回变换的旋转部分,长度为3(x,y和z)。但是,还有一个
Transform::rotation()
函数,根据文档,该函数返回变换的旋转部分


有人能给我解释一下Transform::linear()实际返回的是什么吗?

Transform
使用齐次演算表示仿射变换或投影变换。例如,仿射变换
A
由线性部分
L
和平移
t
组成,使得通过
A
变换点
p
相当于:

 p' = L * p + t
使用齐次向量:

 [p'] = [L t] * [p] = A * [p]
 [1 ]   [0 1]   [1]       [1]
与:


因此,线性部分对应于齐次矩阵表示的左上角。它对应于旋转、缩放和剪切的混合。

遇到同样的问题后,我想补充以下信息:

正如@ggael所解释的,
Transform::linear()
直接返回变换矩阵中的线性部分

Transform::rotation()
返回线性零件中的旋转分量。但由于线性部分包含,提取旋转不是直接的,需要使用奇异值分解(SVD)进行计算

在已知仿射矩阵仅包含旋转和平移的常见情况下,
Transform::linear()
可用于有效访问旋转部分


最后,如果将
变换
模式
模板参数设置为
等轴测
,则Eigen将仅假设旋转和平移,并优化逆变换的计算。在这种情况下,最新版本的Eigen还将优化
Transform::rotation()
,并直接返回线性部分。但是,请注意,没有等距仿射矩阵的压缩版本,其中最后一行未存储并假定为[0…0 1]。

您是指同质矩阵的左上角吗?当有人使用旋转和平移时,我发现这个答案更好。谢谢。我在哪里可以找到关于
rotation()
自动优化的文档?我在Eigen文档或变更日志中没有找到任何东西。。。
 A = [L t]
     [0 1]