我做了一个奇怪的观察,我问自己是否有人有解释。
假设我们有PointCloud,例如完美的圆柱体。这个圆柱体以某种方式放置并在空间中旋转。现在对于这个圆柱体,我们用主成分分析来计算它的质心和特征向量。
现在我可以将它描述为形式的仿射变换:
Eigen::Affine3d pose;
pose.translation << centroid[0], centroid[1], centroid[2];
pose.linear() = evecs;
现在让我们假设我想要将对象转换为明确的,规范的姿势,然后我将执行以下操作:
obj.transform(obj.getPose().inverse());
通过这个我将对象转换为它的局部坐标系,因此它是规范的姿势。并且obj.getPose()
在重新计算它的新特征向量和质心位置(然后应该在(0,0,0)中)之后再构造我它的新姿势。
在我这样做之后,它结束了对象的新的,规范的姿势有时是这样的:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
所以身份矩阵。我本来期待这一点,但有时我得到了这个:
-1 0 0 0
0 -1 0 0
0 0 1 0
0 0 0 1
我无法向自己解释这种行为,因为我在比较姿势,这给我带来了麻烦。你知道为什么会这样吗?
答案 0 :(得分:1)
如果v
是特征向量,则特征向量不是唯一定义的,那么-v
也是特征向量。这正是你观察到的。
此外,如果你有一个完全对称的圆柱体,那么两个特征值应该相等,并且两个相应的特征向量可以任意选择为与第三个特征向量(圆柱体的轴)正交的平面内的一对正交矢量。