¿Cómo traducir una matriz (4x4) en Eigen?
Frecuentes
Visto 10,565 veces
7
¿Cómo traducir una matriz (4x4) en 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);
es decir, tengo matriz:
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
Y quiero conseguir esto:
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
¿Bien? ¿Como puedo hacer esto?
Puedo hacer esto:
result(0, 3) = 3.0f;
result(1, 3) = 4.0f;
result(2, 3) = 5.0f;
Pero no es elegante. =) ¿Qué consejo?
2 Respuestas
10
Me gusta:
Affine3f transform(Translation3f(1,2,3));
Matrix4f matrix = transform.matrix();
Aquí es el documento con más detalles.
Respondido el 02 de diciembre de 13 a las 08:12
7
Alguna alternativa a la respuesta catscradle:
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();
Respondido el 02 de diciembre de 13 a las 09:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ matrix translation eigen or haz tu propia pregunta.
Si no está satisfecho con escribir tres líneas de código para realizar una traducción, entonces mi consejo sería escribir una función para realizar esa traducción y luego llamar a esa función donde sea que necesite hacer la traducción. Esta es una programación elegante normal en cualquier lenguaje. - john