2013-04-23 72 views

回答

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 
+0

这是伟大的。非常感谢:) – 2013-04-23 14:38:18

+0

@DrewNoakes欢迎您!但是,也许有更方便的方法来做到这一点。 – 2013-04-23 14:42:48