我正在尝试使用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不是矩阵类型而且我没有在函数中找到任何有用的构建,所以我不知道如何应用转换。任何帮助将不胜感激
答案 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个角上使用相同的原则。