如何在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 引用。