简体   繁体   中英

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
0.0 1.0 0.0
0.0 0.0 1.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 this:

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

Here is the doc with more details.

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM