c++ - 将特征 Affine3d 转换为 Affine2d

标签 c++ eigen eigen3

我有一个affine transform在 3D 中,我希望丢弃其中的任何 z 轴信息。有没有一种方便的方法可以从 Affine3d 转换为 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

关于c++ - 将特征 Affine3d 转换为 Affine2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169811/

相关文章:

c++ - 如何在 Excel::Range 中包装在 VARIANT 中传递的 Excel Range 对象

eigen - 在 Eigen 稀疏矩阵中将行/列/ block 设置为 0?

C++ Eigen 非连续子集

c++ - 使用 C++ 特征库中的 eigenvectors() 仅计算一个特征向量

c++ - 跨 conservativeResize 将 ColXpr 维护为 MatrixXf

c++ - 如何在 mac os 10.14 上安装 vcremote?

c++ - 函数内存管理C++

c++ - 如何禁止普通用户终止进程?

c++ - 通过索引设置特征矩阵/vector

c++ - Eigen 稀疏 bool 矩阵是否存储非零值?