7

How translation a matrix(4x4) in Eigen?

//identity matrix 4x4
/*type=*/Eigen::Matrix<float, 4, 4> /*name=*/result = Eigen::Matrix<float, 4, 4>::Identity();

//translation vector
// 3.0f
// 4.0f
// 5.0f
Translation<float, 3> trans(3.0f, 4.0f, 5.0f);

ie, I have matrix:

1.0   0.0   0.0   0.0
0.0   1.0   0.0   0.0
0.0   0.0   1.0   0.0
0.0   0.0   0.0   1.0

And I want get this:

1.0   0.0   0.0   3.0
0.0   1.0   0.0   4.0
0.0   0.0   1.0   5.0
0.0   0.0   0.0   1.0

Right? How I can do this?

I can do this:

result(0, 3) = 3.0f;
result(1, 3) = 4.0f;
result(2, 3) = 5.0f;

But it's not elegant. =) What you advice?

Ivan
  • 992
  • 1
  • 10
  • 22
  • If you're not happy with writing three lines of code to perform a translation, then my advise would be to write a function to perform that translation and then call that function wherever you need to do the translation. This is normal elegant programming in any language. – john Dec 02 '13 at 08:18

2 Answers2

11

Like this:

Affine3f transform(Translation3f(1,2,3));
Matrix4f matrix = transform.matrix();

Here is the doc with more details.

catscradle
  • 1,709
  • 11
  • 18
8

Some alternative to catscradle answer:

Matrix4f mat = Matrix4f::Identity();
mat.col(3).head<3>() << 1, 2, 3;

or

mat.col(3).head<3>() = translation_vector;

or

Matrix4f mat;
mat << Matrix3f::Identity, Vector3f(1, 2, 3),
       0, 0, 0,            1;

or

Affine3f a;
a.translation() = translation_vector;
Matrix4f mat = a.matrix();
ggael
  • 28,425
  • 2
  • 65
  • 71