我正在尝试使用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)'
首先我认为我是因为我使用的是double
和int
的组合,这就是为什么我首先对它进行了类型化处理。
答案 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 );