使Eigen :: Vector看起来像一个点矢量

时间:2012-01-25 12:01:47

标签: c++ eigen

我希望以这样的方式表示2D形状,使其可以像点矢量一样进行交互,特别是我希望能够调用运算符[]at()在它上面并返回对2D点的行为的引用。目前我只使用一个类,其唯一的成员变量是点的向量,并且在其元素上具有逐点定义的各种算术和几何运算。

然而,在我的代码的其他部分,我需要将n个点的向量作为2n维空间的元素处理并在其上执行基本线性代数(例如,将向量投影到R ^ 2n的给定子空间上)。目前我每次要创建一个Eigen::VectorXd对象,然后在执行这些操作后转换回来。我不想这样做,因为我经常进行转换,所有复制都是效率低下的显着来源。

如果我将数据存储为双精度/浮点数/整数的平面数组,我可以将指向其第n个元素的指针转换为指向Point的指针(其成员只是一对双精度/浮点数/整数) 。但是,由于我不知道Eigen用于向量的内部表示(并且它可能会改变),这是不可能的。

有没有明智的解决方法?我可以在任何地方使用Eigen::Vector,但我真的希望大多数代码能够假装它正在处理一组点。

1 个答案:

答案 0 :(得分:2)

  

然而,由于我不知道Eigen用于向量的内部表示(并且它可能会改变),这是不可能的。

Eigen提供Map类,允许将普通数组映射到特征结构。例如:

double numbers[2];
Eigen::Vector2f::Map( numbers ).dot( Eigen::Vector2f::Constant(1) );