2016-04-24 242 views
0

我試圖創建一個使用Eigen::Matrix3d旋轉矩陣,但似乎無法準確地做到這一點..創建矩陣?

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; 

} 

我不能箱x_r,y_r,z_r一些奇怪的原因是什麼?..可能有人詳細說明我做錯了什麼?

我收到

錯誤消息:

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

首先,我以爲我是因爲我用的doubleint這就是爲什麼我在首位類型強制轉換它的組合..

+1

定義「我不行」。有什麼問題? –

+0

另外,不需要用'(雙)'代碼氾濫代碼 – 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。您可以在矩陣對象構建後使用超載operator()來設置矩陣條目,例如:

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);