C++ Eigen AlignedBox 转换

C++ Eigen AlignedBox Transformations

我正在尝试使用 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 不是矩阵类型,而且我没有找到任何有用的内置函数,所以我不知道如何应用转换。任何帮助将不胜感激

请注意,结果将是一个二维框。您可以通过对两个 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 个角上使用相同的原理。