2013-12-02 4 views
4

Как перевод матрицы (4x4) в Eigen?Как перевод матрицы (4x4) в 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); 

т.е., у меня есть матрица:

1,0       0,0       0,0       0,0
0,0       1,0       0,0       0,0
,0       0,0       1,0       0,0
0,0       0,0       0,0       1,0

И я хочу получить это:

1,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

правой? Как я могу это сделать?

Я могу это сделать:

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

Но это не элегантно. =) Что вы советуете?

+0

Если вы не довольный написанием трех строк кода для выполнения перевода, тогда мой совет должен был написать функцию для выполнения этого перевода, а затем вызвать эту функцию везде, где вам нужно сделать перевод. Это нормальное элегантное программирование на любом языке. – john

ответ

6

Как это:

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

Here является документ с большим количеством деталей.

4

Некоторые альтернативы catscradle ответ:

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

или

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

или

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

или

Affine3f a; 
a.translation() = translation_vector; 
Matrix4f mat = a.matrix(); 
Смежные вопросы