将本征Affine3d转换为Affine2d [英] Convert Eigen Affine3d to Affine2d

查看:83
本文介绍了将本征Affine3d转换为Affine2d的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在3D中有一个仿射变换,我希望丢弃任何z轴信息来自。是否有方便的方法将 Affine3d 转换为 Affine2d

I have an affine transform in 3D and I wish to discard any z-axis information from. Is there a convenient way to convert from an Affine3d to and Affine2d?

推荐答案

尝试以下操作:

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

这篇关于将本征Affine3d转换为Affine2d的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆