2016-04-24 10 views
0

私はクレートX_R、y_r、いくつかの奇妙な理由でz_rすることはできません。..行列を作成しますか?

void rot(double x,double y,double z) 
{ 

    Eigen::Matrix3d x_r ((double)1,(double)0,(double)0, 
         (double)0,cos(x),-sin(x), 
         (double)0,sin(x),cos(x)); 

    Eigen::Matrix3d y_r (cos(y),(double)0,sin(y), 
         (double)0,(double)1,(double)0, 
         -sin(y),(double)0,cos(y)); 

    Eigen::Matrix3d z_r (cos(z),-sin(z),(double)0, 
         sin(z),cos(z),(double)0, 
         (double)0,(double)0,(double)1) ; 

    Eigen::Matrix3d rot = z_r*y_r*x_r; 

} 

Eigen::Matrix3dを使用して回転行列を作成しようとしていますが、正確にそれを行うように見えることはできません?...誰でした私が間違って何をやっているのか詳しく教えてください。私は受け付けており

エラーメッセージは次のとおりです。

error: no matching function for call to 'Eigen::Matrix<double, 3, 3>::Matrix(double, double, double, double, double, double, double, double, double)' 

まず私が最初の場所でそれを型変換する理由であるdoubleintの組み合わせを使用していたので、私は

+1

"私はできません"を定義して、マトリックスオブジェクトを構築した後でオーバーロードされたoperator()のマトリックスエントリを設定できます。どうしたの? –

+0

また、 '(double)'でコードをあふれさせる必要はありません。 – ForceBru

+0

追加情報を追加しました – Lamda

答えて

5

てみてください..私は思いましたコンストラクタをその初期:

Eigen::Matrix3d x_r; 
Eigen::Matrix3d y_r; 
Eigen::Matrix3d z_r; 

x_r << 1.0, 0.0, 0.0, 
     0.0, cos(x), -sin(x), 
     0.0 ,sin(x), cos(x); 

y_r << cos(y), 0.0, sin(y), 
     0.0, 1.0, 0.0, 
     -sin(y), 0.0, cos(y); 

z_r << cos(z), -sin(z), 0.0, 
     sin(z), cos(z), 0.0, 
     0.0, 0.0, 1.0; 

Eigen::Matrix3d rot = z_r*y_r*x_r; 

で使用しようとしているEigen::Matrix3dのコンストラクタが存在しないようです値を直接サイズ化します。

+0

ああ、そうです。私はドキュメントを誤解したようです。 ありがとう:) – Lamda

1

例では、コンストラクタの行列エントリを渡して行列を構築してみます。しかし、たとえそれがEigen::Matrix3dのような固定(行列)サイズの型であっても、コンストラクタは引数として行列エントリを取りません。

Eigen::Matrix3d M; 

M(0,0) = 1.0; 
M(0,1) = 0.0; 
M(0,2) = 0.0; 

M(1,0) = 0.0; 
M(1,1) = cos(x); 
M(1,2) = -sin(x); 

M(1,0) = 0.0; 
M(1,1) = sin(x); 
M(1,2) = cos(x); 
関連する問題