C ++ Eigen AlignedBox转换

时间:2015-11-20 14:01:31

标签: eigen

我正在尝试使用C ++ Eigen库进行第一步。 Matrix功能非常直观,但是使用Geometry模块中的AlignedBox类型时遇到了一些问题。

对于练习,我必须围绕特定点旋转AlignedBox,并能够使用Eigen :: Transform在2D平面内平移它。 我已经尝试了很长一段时间。

#include <iostream>
#include <eigen3/Eigen/Dense>

int main()
{
    // create 1D AlignedBox
    Eigen::MatrixXf sd1(1,1);
    Eigen::MatrixXf sd2(1,1);
    sd1 << 0;
    sd2 << 3;
    Eigen::AlignedBox1f box1(sd1, sd2);

    // rotation of 45 deg
    typedef Eigen::Rotation2D<float> R2D;
    R2D r(M_PI/4.0);

    // create transformation matrix with rotation of 45 deg
    typedef Eigen::Transform< float, 2, Eigen::AffineCompact > SE2;
    SE2 t;
    t = r;

    // how to apply transformation t to box1???

    return 0;
}

我认为我必须将AlignedBox与t.matrix()相乘但由于Box不是矩阵类型而且我没有在函数中找到任何有用的构建,所以我不知道如何应用转换。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

请注意,结果将是2D框。您可以通过将仿射变换应用于两个2D肢体来计算它,并使用extend方法更新2D框,例如:

AlignedBox2f box2;
box2.extend(t * Vector2f(box1.min()(0), 0));
box2.extend(t * Vector2f(box1.max()(0), 0));

要对box2应用其他转换,您可以使用AlignedBox::corner方法在框的4个角上使用相同的原则。