我有一个3D仿射变换,我希望从中丢弃任何 z 轴信息。有没有一种方便的方法可以从 a 转换Affine3d
为 and Affine2d
?
问问题
3257 次
1 回答
3
尝试以下操作:
Affine2d S2d = Translation2d(S3d.translation().topRows<2>()) *
S3d.linear().topLeftCorner<2,2>();
演示:
#include <Eigen/Dense>
#include <iostream>
#include <string>
int main()
{
using namespace Eigen;
using namespace std;
Vector3d p3d(1.,2.,3.);
cout << p3d << endl << endl;
Affine3d S3d = Translation3d(2.,2.,2.)*Scaling(3.,2.,5.);
Vector3d scalled = S3d*p3d;
cout << S3d.matrix() << endl << endl;
cout << scalled << endl << endl;
cout << string(16,'_') << endl;
Vector2d p2d = p3d.topRows<2>();
cout << p2d << endl << endl;
Affine2d S2d = Translation2d(S3d.translation().topRows<2>()) *
S3d.linear().topLeftCorner<2,2>();
Vector2d scalled2d = S2d*p2d;
cout << S2d.matrix() << endl << endl;
cout << scalled2d << endl << endl;
}
输出:
1
2
3
3 0 0 2
0 2 0 2
0 0 5 2
0 0 0 1
5
6
17
________________
1
2
3 0 2
0 2 2
0 0 1
5
6
于 2013-04-23T14:34:54.407 回答