已知A坐标系通过平移x y z并先绕自身X轴旋转rx再绕新的Y轴旋转ry再绕新的Z轴旋转rz;我想构建旋转矩阵,并且旋转矩阵能转回rx ry rz,经过实测
Eigen::Matrix3d R;
R = Eigen::AngleAxisd(r.x(), Eigen::Vector3d::UnitX()) *
Eigen::AngleAxisd(r.y(), Eigen::Vector3d::UnitY()) *
Eigen::AngleAxisd(r.z(), Eigen::Vector3d::UnitZ());
经过
R.eulerAngles(0, 1, 2);
可以得到原始的rx,ry,rz,
可查到说旋转矩阵是从右往左应用,理解为了
Eigen::AngleAxisd(r.z(), Eigen::Vector3d::UnitZ()) * Eigen::AngleAxisd(r.y(), Eigen::Vector3d::UnitY()) * Eigen::AngleAxisd(r.x(), Eigen::Vector3d::UnitX());
式中的r与再通过
R.eulerAngles(0, 1, 2);
得到的值不一样
麻烦请问一下,是我Eigen中的旋转矩阵乘顺序理解错误还是(0,1,2)的顺序也是从右往左来理解的问题?
是不是数学层面从右往左,但C++执行顺序是从左往右这方面的原因吗?
以下代码输出1 2 3
auto&& fun = [](int a) {
std::cout << a << "\n";
return a;
};
int b = fun(1) * fun(2) * fun(3);
