使特征向量看起来像点的向量

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

本文关键字:向量 看起来 特征      更新时间:2023-10-16

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

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

如果我将数据存储为doubles/floats/ints的平面数组,我可以将指向其第n个元素的指针强制转换为指向Point的指针(其成员将只是一对double/foats/ints)。然而,由于我不知道Eigen用于向量的内部表示(它很可能会改变),这是不可能的。

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

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

Eigen提供了Map类,允许将平面阵列映射到Eigen结构。例如:

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