Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How translation a matrix(4x4) in Eigen?

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?

like image 602
Ivan Avatar asked Dec 02 '13 08:12

Ivan


2 Answers

Like this:

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

Here is the doc with more details.

like image 118
catscradle Avatar answered Oct 30 '22 15:10

catscradle


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();
like image 38
ggael Avatar answered Oct 30 '22 15:10

ggael