Correct variable names and refactor code.
							parent
							
								
									58ec261cd7
								
							
						
					
					
						commit
						6f33d00654
					
				|  | @ -106,17 +106,18 @@ Similarity3 Similarity3::Align(const std::vector<Point3Pair>& abPointPairs) { | |||
|     aCentroid += abPair.first; | ||||
|     bCentroid += abPair.second; | ||||
|   } | ||||
|   double f = 1.0 / n; | ||||
|   const double f = 1.0 / n; | ||||
|   aCentroid *= f; | ||||
|   bCentroid *= f; | ||||
| 
 | ||||
|   // Add to form H matrix
 | ||||
|   Matrix3 H = Z_3x3; | ||||
|   vector<Point3Pair> d_abPairs; | ||||
|   d_abPairs.reserve(n); | ||||
|   for (const Point3Pair& abPair : abPointPairs) { | ||||
|     Point3 da = abPair.first - aCentroid; | ||||
|     Point3 db = abPair.second - bCentroid; | ||||
|     d_abPairs.push_back(make_pair(da,db)); | ||||
|     d_abPairs.emplace_back(da, db); | ||||
|     H += da * db.transpose(); | ||||
|   } | ||||
| 
 | ||||
|  | @ -135,7 +136,7 @@ Similarity3 Similarity3::Align(const std::vector<Point3Pair>& abPointPairs) { | |||
|   } | ||||
|   double s = y / x; | ||||
| 
 | ||||
|   Point3 aTb = (Point3(aCentroid) - s * (aRb * Point3(bCentroid))) / s; | ||||
|   Point3 aTb = (aCentroid - s * (aRb * bCentroid)) / s; | ||||
|   return Similarity3(aRb, aTb, s); | ||||
| } | ||||
| 
 | ||||
|  | @ -166,9 +167,9 @@ Similarity3 Similarity3::Align(const std::vector<Pose3Pair>& abPosePairs) { | |||
|   for (const Pose3Pair& abPair : abPosePairs) { | ||||
|     aCentroid += abPair.first.translation(); | ||||
|     bCentroid += abPair.second.translation(); | ||||
|     rotationList.push_back(abPair.first.rotation().compose(abPair.second.rotation().inverse())); | ||||
|     rotationList.emplace_back(abPair.first.rotation().compose(abPair.second.rotation().inverse())); | ||||
|   } | ||||
|   double f = 1.0 / n; | ||||
|   const double f = 1.0 / n; | ||||
|   aCentroid *= f; | ||||
|   bCentroid *= f; | ||||
|   Rot3 aRb = Similarity3::rotationAveraging(rotationList); | ||||
|  | @ -185,7 +186,7 @@ Similarity3 Similarity3::Align(const std::vector<Pose3Pair>& abPosePairs) { | |||
|   } | ||||
|   double s = y / x; | ||||
| 
 | ||||
|   Point3 aTb = (Point3(aCentroid) - s * (aRb * Point3(bCentroid))) / s; | ||||
|   Point3 aTb = (aCentroid - s * (aRb * bCentroid)) / s; | ||||
|   return Similarity3(aRb, aTb, s); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -260,71 +260,65 @@ TEST(Similarity3, GroupAction) { | |||
| //******************************************************************************
 | ||||
| // Group action on Pose3
 | ||||
| TEST(Similarity3, GroupActionPose3) { | ||||
|   Similarity3 bTa(Rot3::Ry(180 * degree), Point3(2, 3, 5), 2.0); | ||||
|   Similarity3 bSa(Rot3::Ry(180 * degree), Point3(2, 3, 5), 2.0); | ||||
| 
 | ||||
|   // Create source poses
 | ||||
|   Pose3 Ta1 = Pose3(Rot3(), Point3(0, 0, 0)); | ||||
|   Pose3 Ta2 = Pose3(Rot3(-1, 0, 0, 0, 1, 0, 0, 0, 1), Point3(4, 0, 0)); | ||||
| 
 | ||||
|   // Create destination poses
 | ||||
|   Pose3 expectedTb1 = Pose3(Rot3(-1, 0, 0, 0, 1, 0, 0, 0, -1), Point3(4, 6, 10)); | ||||
|   Pose3 expectedTb2 = Pose3(Rot3(1, 0, 0, 0, 1, 0, 0, 0, -1), Point3(-4, 6, 10)); | ||||
|   Pose3 expected_Tb1 = Pose3(Rot3(-1, 0, 0, 0, 1, 0, 0, 0, -1), Point3(4, 6, 10)); | ||||
|   Pose3 expected_Tb2 = Pose3(Rot3(1, 0, 0, 0, 1, 0, 0, 0, -1), Point3(-4, 6, 10)); | ||||
| 
 | ||||
|   EXPECT(assert_equal(expectedTb1, bTa.transformFrom(Ta1))); | ||||
|   EXPECT(assert_equal(expectedTb2, bTa.transformFrom(Ta2))); | ||||
|   EXPECT(assert_equal(expected_Tb1, bSa.transformFrom(Ta1))); | ||||
|   EXPECT(assert_equal(expected_Tb2, bSa.transformFrom(Ta2))); | ||||
| } | ||||
| 
 | ||||
| //******************************************************************************
 | ||||
| // Align with Point3 Pairs
 | ||||
| TEST(Similarity3, AlignPoint3_1) { | ||||
|   Similarity3 expected(Rot3::Rz(-90 * degree), Point3(3, 4, 5), 2.0); | ||||
|   Similarity3 expected_aSb(Rot3::Rz(-90 * degree), Point3(3, 4, 5), 2.0); | ||||
| 
 | ||||
|   Point3 p1 = Point3(0, 0, 0); | ||||
|   Point3 p2 = Point3(3, 0, 0); | ||||
|   Point3 p3 = Point3(3, 0, 4); | ||||
|   Point3 b1(0, 0, 0), b2(3, 0, 0), b3(3, 0, 4); | ||||
| 
 | ||||
|   Point3Pair ab1(make_pair(expected.transformFrom(p1), p1)); | ||||
|   Point3Pair ab2(make_pair(expected.transformFrom(p2), p2)); | ||||
|   Point3Pair ab3(make_pair(expected.transformFrom(p3), p3)); | ||||
|   Point3Pair ab1(make_pair(expected_aSb.transformFrom(b1), b1)); | ||||
|   Point3Pair ab2(make_pair(expected_aSb.transformFrom(b2), b2)); | ||||
|   Point3Pair ab3(make_pair(expected_aSb.transformFrom(b3), b3)); | ||||
| 
 | ||||
|   vector<Point3Pair> correspondences{ab1, ab2, ab3}; | ||||
| 
 | ||||
|   Similarity3 actual = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected, actual)); | ||||
|   Similarity3 actual_aSb = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected_aSb, actual_aSb)); | ||||
| } | ||||
| 
 | ||||
| TEST(Similarity3, AlignPoint3_2) { | ||||
|   Similarity3 expected(Rot3(), Point3(10, 10, 0), 1.0); | ||||
|   Similarity3 expected_aSb(Rot3(), Point3(10, 10, 0), 1.0); | ||||
| 
 | ||||
|   Point3 p1 = Point3(0, 0, 0); | ||||
|   Point3 p2 = Point3(20, 10, 0); | ||||
|   Point3 p3 = Point3(10, 20, 0); | ||||
|   Point3 b1(0, 0, 0), b2(20, 10, 0), b3(10, 20, 0); | ||||
| 
 | ||||
|   Point3Pair ab1(make_pair(expected.transformFrom(p1), p1)); | ||||
|   Point3Pair ab2(make_pair(expected.transformFrom(p2), p2)); | ||||
|   Point3Pair ab3(make_pair(expected.transformFrom(p3), p3)); | ||||
|   Point3Pair ab1(make_pair(expected_aSb.transformFrom(b1), b1)); | ||||
|   Point3Pair ab2(make_pair(expected_aSb.transformFrom(b2), b2)); | ||||
|   Point3Pair ab3(make_pair(expected_aSb.transformFrom(b3), b3)); | ||||
| 
 | ||||
|   vector<Point3Pair> correspondences{ab1, ab2, ab3}; | ||||
| 
 | ||||
|   Similarity3 actual = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected, actual)); | ||||
|   Similarity3 actual_aSb = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected_aSb, actual_aSb)); | ||||
| } | ||||
| 
 | ||||
| TEST(Similarity3, AlignPoint3_3) { | ||||
|   Similarity3 expected(Rot3::RzRyRx(0.3, 0.2, 0.1), Point3(20, 10, 5), 1.0); | ||||
|   Similarity3 expected_aSb(Rot3::RzRyRx(0.3, 0.2, 0.1), Point3(20, 10, 5), 1.0); | ||||
| 
 | ||||
|   Point3 p1 = Point3(0, 0, 1); | ||||
|   Point3 p2 = Point3(10, 0, 2); | ||||
|   Point3 p3 = Point3(20, -10, 30); | ||||
|   Point3 b1(0, 0, 1), b2(10, 0, 2), b3(20, -10, 30); | ||||
| 
 | ||||
|   Point3Pair ab1(make_pair(expected.transformFrom(p1), p1)); | ||||
|   Point3Pair ab2(make_pair(expected.transformFrom(p2), p2)); | ||||
|   Point3Pair ab3(make_pair(expected.transformFrom(p3), p3)); | ||||
|   Point3Pair ab1(make_pair(expected_aSb.transformFrom(b1), b1)); | ||||
|   Point3Pair ab2(make_pair(expected_aSb.transformFrom(b2), b2)); | ||||
|   Point3Pair ab3(make_pair(expected_aSb.transformFrom(b3), b3)); | ||||
| 
 | ||||
|   vector<Point3Pair> correspondences{ab1, ab2, ab3}; | ||||
| 
 | ||||
|   Similarity3 actual = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected, actual)); | ||||
|   Similarity3 actual_aSb = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected_aSb, actual_aSb)); | ||||
| } | ||||
| 
 | ||||
| //******************************************************************************
 | ||||
|  | @ -339,7 +333,7 @@ TEST(Similarity3, RotationAveraging) { | |||
| //******************************************************************************
 | ||||
| // Align with Pose3 Pairs
 | ||||
| TEST(Similarity3, AlignPose3) { | ||||
|   Similarity3 expected(Rot3::Ry(180 * degree), Point3(2, 3, 5), 2.0); | ||||
|   Similarity3 expected_aSb(Rot3::Ry(180 * degree), Point3(2, 3, 5), 2.0); | ||||
| 
 | ||||
|   // Create source poses
 | ||||
|   Pose3 Ta1 = Pose3(Rot3(), Point3(0, 0, 0)); | ||||
|  | @ -354,8 +348,8 @@ TEST(Similarity3, AlignPose3) { | |||
| 
 | ||||
|   vector<Pose3Pair> correspondences{bTa1, bTa2}; | ||||
| 
 | ||||
|   Similarity3 actual = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected, actual)); | ||||
|   Similarity3 actual_aSb = Similarity3::Align(correspondences); | ||||
|   EXPECT(assert_equal(expected_aSb, actual_aSb)); | ||||
| } | ||||
| 
 | ||||
| //******************************************************************************
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue