AdaptAutoDiff now works with RowMajor Eigen matrices

release/4.3a0
dellaert 2014-10-20 14:39:28 +02:00
parent df5e584412
commit bf5580d518
1 changed files with 12 additions and 12 deletions

View File

@ -535,8 +535,8 @@ class AdaptAutoDiff {
public: public:
typedef Eigen::Matrix<double, N, M1> JacobianTA1; typedef Eigen::Matrix<double, N, M1, Eigen::RowMajor> JacobianTA1;
typedef Eigen::Matrix<double, N, M2> JacobianTA2; typedef Eigen::Matrix<double, N, M2, Eigen::RowMajor> JacobianTA2;
T operator()(const A1& a1, const A2& a2, boost::optional<JacobianTA1&> H1 = T operator()(const A1& a1, const A2& a2, boost::optional<JacobianTA1&> H1 =
boost::none, boost::optional<JacobianTA2&> H2 = boost::none) { boost::none, boost::optional<JacobianTA2&> H2 = boost::none) {
@ -606,9 +606,9 @@ TEST(Expression, AutoDiff3) {
Matrix E1 = numericalDerivative21<Point2, Camera, Point3>(Adaptor(), P, X); Matrix E1 = numericalDerivative21<Point2, Camera, Point3>(Adaptor(), P, X);
Matrix E2 = numericalDerivative22<Point2, Camera, Point3>(Adaptor(), P, X); Matrix E2 = numericalDerivative22<Point2, Camera, Point3>(Adaptor(), P, X);
// Get derivatives with AutoDiff // Get derivatives with AutoDiff, not gives RowMajor results!
Matrix29 H1; Eigen::Matrix<double, 2, 9, Eigen::RowMajor> H1;
Matrix23 H2; Eigen::Matrix<double, 2, 3, Eigen::RowMajor> H2;
Point2 actual2 = snavely(P, X, H1, H2); Point2 actual2 = snavely(P, X, H1, H2);
EXPECT(assert_equal(expected,actual,1e-9)); EXPECT(assert_equal(expected,actual,1e-9));
EXPECT(assert_equal(E1,H1,1e-8)); EXPECT(assert_equal(E1,H1,1e-8));
@ -616,13 +616,13 @@ TEST(Expression, AutoDiff3) {
} }
TEST(Expression, Snavely) { TEST(Expression, Snavely) {
Expression<Camera> P(1); // Expression<Camera> P(1);
Expression<Point3> X(2); // Expression<Point3> X(2);
// AutoDiff<SnavelyProjection, 2, 9, 3> f; //// AutoDiff<SnavelyProjection, 2, 9, 3> f;
Expression<Point2> expression( // Expression<Point2> expression(
AdaptAutoDiff<SnavelyProjection, Point2, Camera, Point3>(), P, X); // AdaptAutoDiff<SnavelyProjection, Point2, Camera, Point3>(), P, X);
set<Key> expected = list_of(1)(2); // set<Key> expected = list_of(1)(2);
EXPECT(expected == expression.keys()); // EXPECT(expected == expression.keys());
} }
/* ************************************************************************* */ /* ************************************************************************* */