扩展了Eigen :: Vector2d的功能

时间:2018-04-21 05:24:42

标签: c++ linear-algebra eigen eigen3

你如何在Eigen :: Vector2f之上构建一个Point类?我想做点什么...

Point p0(1, 2);
Point p1(3, 4);
p0.x += p0.y;
p1 += p0;
cout << p1.transpose() << endl;

我基本上需要命名向量的元素,所以我可以将它们称为x,y,但我仍然希望Eigen的所有线性代数都可以工作。有点像C中的联合。我是否必须在Eigen::Vector2f周围构建一个包装器,将所有数学运算符转发到Eigen

这只是我需要的一个简单例子。实际上,我有一些由命名变量组成的长状态向量,我想将其打包到Eigen::VectorXd中并进行线性代数。我想要一个名为StateVector的类,当我对它进行数学运算时看起来像Eigen::Vector,但我可以按名称操作成员变量。

1 个答案:

答案 0 :(得分:0)

在执行线性代数时,通过使状态向量类型返回Eigen::Map来解除两种用法是否可行:

State s;
s.theta = ...;
s.phi = ...;
auto v = s.vec(); // returns Map<Vector2f>(&s);
// use v just like a Vector2f:
v += 0.2*v;

v,是s的别名,因此上述内容与:

相同
s.theta += O.2*s.theta;
s.phi   += O.2*s.phi;

否则,您可以使用插件机制添加phi()theta()方法返回const /非const引用,就像当前的x()/y()方法一样。