我希望以这样的方式表示2D形状,使其可以像点矢量一样进行交互,特别是我希望能够调用运算符[]
和at()
在它上面并返回对2D点的行为的引用。目前我只使用一个类,其唯一的成员变量是点的向量,并且在其元素上具有逐点定义的各种算术和几何运算。
然而,在我的代码的其他部分,我需要将n个点的向量作为2n维空间的元素处理并在其上执行基本线性代数(例如,将向量投影到R ^ 2n的给定子空间上)。目前我每次要创建一个Eigen::VectorXd
对象,然后在执行这些操作后转换回来。我不想这样做,因为我经常进行转换,所有复制都是效率低下的显着来源。
如果我将数据存储为双精度/浮点数/整数的平面数组,我可以将指向其第n个元素的指针转换为指向Point的指针(其成员只是一对双精度/浮点数/整数) 。但是,由于我不知道Eigen用于向量的内部表示(并且它可能会改变),这是不可能的。
有没有明智的解决方法?我可以在任何地方使用Eigen::Vector
,但我真的希望大多数代码能够假装它正在处理一组点。
答案 0 :(得分:2)
然而,由于我不知道Eigen用于向量的内部表示(并且它可能会改变),这是不可能的。
Eigen提供Map
类,允许将普通数组映射到特征结构。例如:
double numbers[2];
Eigen::Vector2f::Map( numbers ).dot( Eigen::Vector2f::Constant(1) );