背景
std::vector やポインタから Eigen::MatrixXd
などの動的サイズの Matrix に変換したい.
方法
Eigen::Map を使う.
引数のサイズは, MatrixXd で個数なので, out-of-bounds アクセスにならないように気を付ける.
(map に指定できるのは入力側ではポインタのアドレスだけっぽい)
std::vector<double> pts(3 * 100);
Eigen::Map<Eigen::MatrixXd> p(pts.data(), 3, 100);
Row major or column major?
メモリの格納レイアウト.
Eigen では default は column-major である(OpenGL と同じ).
三次元座標データだと, std::vector では XYZXYZXYZ... と格納されているのを想定していると解釈されるとの理解でよいかと思います.
TODO
- Stride や alignment を考慮した指定方法を確認する.
- row major, column major 切り替えの方法を探す.
- memcpy 的な方法を探す(デフォルトのコンストラクタが memcpy 的かな?)