1

ポイントのベクトルであるかのように操作できるように 2D 形状を表現したいと考えています。特に、演算子[]とそのat()上で呼び出して、2D ポイントのように機能するものへの参照を返すことができるようにしたいと考えています。現在、唯一のメンバー変数がポイントのベクトルであり、その要素に対してさまざまな算術演算および幾何学的演算が定義されているクラスを使用しています。

ただし、コードの他の部分では、n 点のベクトルを 2n 次元空間の要素として扱い、基本的な線形代数を実行する必要があります (たとえば、ベクトルを R^2n の特定の部分空間に射影します)。現在Eigen::VectorXd、これを行うたびにオブジェクトを作成し、これらの操作を実行した後に元に戻しています。私はこれをしたくありません。なぜなら、すべてのコピーが非効率の明らかな原因となるほど頻繁に変換を行うからです。

データを double/floats/int のフラットな配列として格納する場合、その n 番目の要素へのポインターを Point へのポインターにキャストできます (そのメンバーは double/floats/int のペアになります)。ただし、Eigen がベクトルに使用する内部表現がわからないため (そして変更される可能性があります)、これは不可能です。

これを解決する賢明な方法はありますか?どこでも sを使用できますEigen::Vectorが、ほとんどのコードで、一連の点を扱っているふりをできるようにしたいと考えています。

4

1 に答える 1

2

ただし、Eigen がベクトルに使用する内部表現がわからないため (そして変更される可能性があります)、これは不可能です。

Eigen は、Mapプレーン配列を Eigen 構造体にマッピングできるクラスを提供します。例えば:

double numbers[2];
Eigen::Vector2f::Map( numbers ).dot( Eigen::Vector2f::Constant(1) );
于 2012-01-25T12:13:13.920 に答える