我想以一种可以与之交互的方式表示 2D 形状,就好像它是点的向量一样,特别是我希望能够调用 operator[]
并at()
在其上调用并返回对像 2D 点一样的事物的引用。目前我只使用一个类,它的唯一成员变量是一个点向量,并且在其元素上逐点定义了各种算术和几何运算。
但是,在我的代码的其他部分,我需要将 n 个点的向量视为 2n 维空间的元素并对其执行基本的线性代数(例如,将向量投影到 R^2n 的给定子空间上)。目前,我Eigen::VectorXd
每次想要执行此操作时都会创建一个对象,然后在执行这些操作后转换回来。我不想这样做,因为我经常进行转换,以至于所有的复制都是一个明显的低效率来源。
如果我将数据存储为双精度/浮点数/整数的平面数组,我可以将指向其第 n 个元素的指针转换为指向 Point 的指针(其成员将只是一对双精度数/浮点数/整数)。但是,由于我不知道 Eigen 用于向量的内部表示(并且它可能会改变),所以这是不可能的。
有解决这个问题的明智方法吗?我可以在Eigen::Vector
任何地方使用 s,但我真的希望大多数代码能够假装它正在处理一组点。