4

Eigen数学ライブラリを使い始めると、非常に単純なタスクで問題が発生します。クォータニオンを使用して一連のベクトルを変換します。私が行うすべての結果がoperator*見つからないか、配列と行列が混在しているようです。

Eigen::Quaternionf rot = …;
Eigen::Array3Xf series = …;

// expected this to work as matrix() returns a Transformation:
series.matrix().colwise() *= rot.matrix();

// expected these to work as it's standard notation:
series = rot.matrix() * series.matrix().colwise();
series = rot.toRotationMatrix() * series.matrix().colwise();

// Also tried adding .homogeneous() as one example used it… no dice
4

2 に答える 2

4

うーん...例で配列を使用する理由がわかりません。m個の3ベクトルを腐敗で変換したいと思いますよね?これには3xmマトリックスを使用できます。

どうですか

using namespace Eigen;
Quaternionf rot = ...;
Matrix<float,3,Dynamic> series = ...;

series = rot.toRotationMatrix() * series;
于 2012-08-05T09:07:21.363 に答える
0

これは非常に鈍いですが、効果的な解決策かもしれません:

for (int vector = 0; vector < series.cols(); ++vector)
   series.col(vector) = rot * series.col(vector).matrix();

ここでのポイントは、どこかで誰かがあなたのコードを読まなければならないということです。多くの場合、単純なforループが最も理解しやすいです。

于 2012-07-30T10:24:45.283 に答える