如何使用Eigen3从比例和平移创建转换矩阵

  • 本文关键字:创建 转换 Eigen3 何使用 c++ eigen3
  • 更新时间 :
  • 英文 :


我对如何创建一个简单的转换矩阵感到困惑。

我有以下C++代码:

static constexpr float pos_scale = 2 * size / iside;
static constexpr std::array<float, 2> pos_translation = { -size, -size };

不幸的是,pos_translation需要是std::array,因为您无法生成Eigen::Vector2fconstexpr。

然后我有一个矢量:

Vector2i xy;

这将充满一些数据。我想将xy转换为Vector2f,方法是将其转换为齐次坐标,乘以变换矩阵,然后再次删除齐次坐标。

转换矩阵被声明为

Matrix3f xy_to_pos;

至少,我认为这是正确的类型?

我的问题是,如何从pos_scale(必须首先应用:首先是缩放,然后是平移(和pos_translation初始化xy_to_pos

一旦我有了xy_to_pos,我将如何使用它将xy转换为Vector2f pos

我试过各种各样的东西,比如

Matrix3f xy_to_pos = Matrix3f::Identity() * Eigen::Scaling(pos_scale) * Eigen::Translation2f(pos_translation[0], pos_translation[1]);

但是什么都不编译,编译错误也于事无补。当然,我也在谷歌上搜索过,但找不到一个有用的例子。

我发现了:

static constexpr float pos_scale = 2 * size / iside;
static constexpr std::array<float, 2> pos_translation = { -size, -size };
Transform<float, 2, Affine> const xy_to_pos =
Transform<float, 2, Affine>{Transform<float, 2, Affine>::Identity()}
.translate(Vector2f{pos_translation.data()})
.scale(pos_scale);
Vector2i xy(2, 3); // Or whatever
Vector2f pos = xy_to_pos * xy.cast<float>();

相关内容

  • 没有找到相关文章

最新更新