使用Eigen C ++库,我有一个Matrix3f A
,一个Vector4f b
和一个Vector4f c
。我想从这些中创建一个Matrix4f M
。我希望M
的顶部3 x 3角为A
,我希望M
的最后一列为b
,我希望最后一行M
为c
。
我知道如何通过简单地创建Matrix4f并单独分配每个元素来完成此操作。但是,Eigen支持更优雅的解决方案吗?
答案 0 :(得分:3)
这算得上还算优雅吗?
#include <Eigen/Sparse>
#include <iostream>
using namespace Eigen;
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
Matrix4f m = Matrix4f::Random();
Matrix3f A = Matrix3f::Constant(0.1);
Vector4f b = Vector4f::Constant(0.2), c = Vector4f::Constant(0.3);
cout << m << endl << endl;
cout << A << endl << endl;
cout << b << endl << endl;
cout << c << endl << endl;
m.block(0, 0, 3, 3) = A;
m.col(3) = b;
m.row(3) = c;
cout << m << endl << endl;
return 0;
}
请注意,您的问题有点模棱两可,因为(3,3)职位将由b
和c
之间的分配顺序决定。