2次元の図形をポイントのベクトルであるかのようにやりとりできるような方法で表現したい、とくに私は呼び出したいオペレータ[]
とat()
があり、2D点のように動作するものへの参照が返されます。現在、私はちょうどメンバ変数が点のベクトルであり、その要素上にポイントワイズに定義されたさまざまな算術演算と幾何学演算を持つクラスを使用しています。Eigen :: Vectorを点のベクトルのようにする
しかし、私のコードの他の部分では、2n次元空間の要素としてn点のベクトルを扱い、その上で基本線形代数を実行する必要があります(例えば、ベクトルをR^2nの部分空間に投影する)。現在私はEigen::VectorXd
オブジェクトを作成していますが、これを実行してから、これらの操作を実行した後で変換しています。私はこれをやりたくはありません。私は変換を頻繁にして、すべてのコピーが顕著な非効率性の源泉であるようにします。
データをdouble/float/intのフラットな配列として格納していた場合、そのn番目の要素へのポインタをPointへのポインタにキャストできます(メンバはdouble/floats/intのペアになります)。 )。しかし、Eigenがベクトルに使用する内部表現はわからないので(それはうまく変わる可能性があります)、これは不可能です。
これを解決するには賢明な方法がありますか?私はちょうどEigen::Vector
をどこでも使うことができますが、私は本当にコードの大部分がポイントのセットを扱っていることをふりまとめたいと思っています。
ありがとうございます。他の方向では、稠密なマトリックスのデータは連続していることが保証されていますか?すなわち、マット .data()がTsの配列へのポインタを返すと仮定するのは安全でしょうか? –
theotherphil
@ user967771:私はそう思う(「密行列」の定義によって)、しかし証拠はない。 'PlainObjectBase'の' data'メンバーは、連続した格納がなければ意味をなさないでしょう。 – thiton
それはそうです。ありがとう。 – theotherphil