关于c ++:使Eigen :: Vector看起来像一个点向量

Making an Eigen::Vector look like a vector of points

我想用这样一种方式来表示一个二维形状,它可以像一个点的向量那样相互作用,特别是我想能够在它上面调用operator[]at(),并返回对类似于二维点的事物的引用。目前我只使用一个类,它的唯一成员变量是点的向量,并且它的元素上有各种各样的算术和几何运算。

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

如果将数据存储为double/floats/int的平面数组,我可以将指向其第n个元素的指针转换为指向某个点的指针(其成员将只是一对double/floats/int)。但是,由于我不知道本征用于向量的内部表示(它可能会发生变化),所以这是不可能的。

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


However, as I don't know the internal representation that Eigen uses for vectors (and it may well change), this isn't possible.

eigen提供了Map类,允许将平面数组映射到eigen结构。例如:

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