线性代数的eigen库最近的稳定版本的一个副本(相当于就是借用第三方库了),VCGLib中的高级矩阵操作都是基于这个库的。
用vs编译使用Eigen非常方便。
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
}
很方便的就是,这个类重载了cout,这样直接 cout << m << endl;就行了,但是对大型矩阵输出对不齐,不方便查看(想看就输出成txt看吧)。如果是小矩阵比如3*3,或者4*4或者这样大小的,可以直接用Matrix4f类似的可以类推。
除了设置矩阵,还可以用向量的形式初始化,可以使静态的也可以是动态的。
VectorXd,这样一个维度是1的其实也是矩阵,不过就是起了新的好理解的名字。比如:
typedef Matrix<double, Dynamic, Dynamic> MatrixXd;
typedef Matrix<int, Dynamic, 1> VectorXi;
可以使用Resize()函数重写
Matrix4d m;
m.resize(4,4); // no operation
如果维度没有变,是没有操作的,如果维度变了,这个函数是dextructive的,原来的参数可能会变,如果想保留原来的,使用conservativeResize()方法。
https://blog.csdn.net/hanss2/article/details/78822955
具体矩阵的性质的使用和计算,这兄弟总结挺好的= =。