你如何在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
,但我可以按名称操作成员变量。
答案 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()
方法一样。