Add jacobian tests for retract of Unit3 & OrientedPlane3
							parent
							
								
									65be6e77a9
								
							
						
					
					
						commit
						5d87e68097
					
				|  | @ -161,6 +161,42 @@ TEST (OrientedPlane3, error2) { | ||||||
|   EXPECT(assert_equal(expectedH2, actualH2, 1e-9)); |   EXPECT(assert_equal(expectedH2, actualH2, 1e-9)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | //*******************************************************************************
 | ||||||
|  | // Wrapper to make retract return a Vector3 so we can test numerical derivatives.
 | ||||||
|  | Vector4 RetractTest(const OrientedPlane3& plane, const Vector3& v, | ||||||
|  |                     OptionalJacobian<4, 3> H) { | ||||||
|  |   OrientedPlane3 plane_retract = plane.retract(v, H); | ||||||
|  |   return Vector4(plane_retract.normal().point3().x(), | ||||||
|  |                  plane_retract.normal().point3().y(), | ||||||
|  |                  plane_retract.normal().point3().z(), | ||||||
|  |                  plane_retract.distance()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //*******************************************************************************
 | ||||||
|  | TEST (OrientedPlane3, jacobian_retract) { | ||||||
|  |   OrientedPlane3 plane(-1, 0.1, 0.2, 5); | ||||||
|  |   Matrix43 H; | ||||||
|  |   { | ||||||
|  |       Vector3 v (-0.1, 0.2, 0.3); | ||||||
|  |       plane.retract(v, H); | ||||||
|  |       // Test that jacobian is numerically as expected.
 | ||||||
|  |       boost::function<Vector4(const OrientedPlane3&, const Vector3&)> f = | ||||||
|  |           boost::bind(RetractTest, _1, _2, boost::none); | ||||||
|  |       Matrix43 H_expected_numerical = numericalDerivative22(f, plane, v); | ||||||
|  |       EXPECT(assert_equal(H_expected_numerical, H, 1e-9)); | ||||||
|  |   } | ||||||
|  |   { | ||||||
|  |       Matrix43 H; | ||||||
|  |       Vector3 v (0, 0, 0); | ||||||
|  |       plane.retract(v, H); | ||||||
|  |       // Test that jacobian is numerically as expected.
 | ||||||
|  |       boost::function<Vector4(const OrientedPlane3&, const Vector3&)> f = | ||||||
|  |           boost::bind(RetractTest, _1, _2, boost::none); | ||||||
|  |       Matrix43 H_expected_numerical = numericalDerivative22(f, plane, v); | ||||||
|  |       EXPECT(assert_equal(H_expected_numerical, H, 1e-9)); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* ************************************************************************* */ | /* ************************************************************************* */ | ||||||
| int main() { | int main() { | ||||||
|   srand(time(NULL)); |   srand(time(NULL)); | ||||||
|  |  | ||||||
|  | @ -371,6 +371,41 @@ TEST(Unit3, retract) { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | //*******************************************************************************
 | ||||||
|  | // Wrapper to make retract return a Vector3 so we can test numerical derivatives.
 | ||||||
|  | Vector3 RetractTest(const Unit3&p, const Vector2& v, OptionalJacobian<3, 2> H) { | ||||||
|  |   Unit3 p_retract = p.retract(v, H); | ||||||
|  |   return p_retract.point3(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //*******************************************************************************
 | ||||||
|  | TEST (OrientedPlane3, jacobian_retract) { | ||||||
|  |   Unit3 p; | ||||||
|  |   { | ||||||
|  |       Vector2 v (-0.2, 0.1); | ||||||
|  |       Matrix32 H; | ||||||
|  |       p.retract(v, H); | ||||||
|  | 
 | ||||||
|  |       // Test that jacobian is numerically as expected.
 | ||||||
|  |       boost::function<Vector3(const Unit3&, const Vector2&)> f = | ||||||
|  |           boost::bind(RetractTest, _1, _2, boost::none); | ||||||
|  |       Matrix32 H_expected_numerical = numericalDerivative22(f, p, v); | ||||||
|  |       EXPECT(assert_equal(H_expected_numerical, H, 1e-9)); | ||||||
|  |   } | ||||||
|  |   { | ||||||
|  |       Vector2 v (0, 0); | ||||||
|  |       Matrix32 H; | ||||||
|  |       p.retract(v, H); | ||||||
|  | 
 | ||||||
|  |       // Test that jacobian is numerically as expected.
 | ||||||
|  |       boost::function<Vector3(const Unit3&, const Vector2&)> f = | ||||||
|  |           boost::bind(RetractTest, _1, _2, boost::none); | ||||||
|  |       Matrix32 H_expected_numerical = numericalDerivative22(f, p, v); | ||||||
|  |       EXPECT(assert_equal(H_expected_numerical, H, 1e-9)); | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| //*******************************************************************************
 | //*******************************************************************************
 | ||||||
| TEST(Unit3, retract_expmap) { | TEST(Unit3, retract_expmap) { | ||||||
|   Unit3 p; |   Unit3 p; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue