扩展 Eigen::Vector2d 的功能



如何在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,但我可以按名称操作成员变量。

在做线性代数时,通过让你的状态向量类型返回一个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()方法,就像当前的x()/y()方法一样返回 const/non-const 引用。

最新更新