创建矩阵?

时间:2016-04-24 16:43:43

标签: c++ c++11 matrix eigen

我正在尝试使用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的组合,这就是为什么我首先对它进行了类型化处理。

2 个答案:

答案 0 :(得分: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的构造函数:直接初始化值的构造函数。

答案 1 :(得分: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 );