我的测试方法如下:
TEST_METHOD(RotationTest1)
{
std::stringstream log;
Eigen::Affine3d t(
Eigen::AngleAxisd(M_PI / 4, Eigen::Vector3d::UnitZ())*
Eigen::AngleAxisd(M_PI / 8, Eigen::Vector3d::UnitY())
);
log << "Expected:\n" << t.rotation();
Eigen::Affine3d act;
act = Eigen::AngleAxisd(M_PI / 4, Eigen::Vector3d::UnitZ())*
Eigen::AngleAxisd(M_PI / 8, Eigen::Vector3d::UnitY()) * act;
//act.prerotate(Eigen::AngleAxisd(M_PI / 8, Eigen::Vector3d::UnitY()));
//act.prerotate(Eigen::AngleAxisd(M_PI / 4, Eigen::Vector3d::UnitZ()));
log << "\nActual:\n" << act.rotation();
Logger::WriteMessage(log.str().c_str());
Assert::IsTrue(t.rotation().isApprox(act.rotation()));
}
这产生了以下不一致的输出:
Expected:
0.653281 -0.707107 0.270598
0.653281 0.707107 0.270598
-0.382683 0 0.92388
Actual:
-0.756394 0.645492 -0.10587
-0.324051 -0.510375 -0.79656
-0.568206 -0.568206 0.595217
请问有人向我解释上述行为吗?
答案 0 :(得分:0)
在尝试任何其他转换之前,我没有将转换设置为identity。要修复它,请在默认构造之后添加行:
Eigen::Affine3d act;
act.setIdentity();
或使用单位矩阵构建:
Eigen::Affine3d act(Eigen::Affine3d::Identity());