comparison UnitTestsSources/UnitTestsMain.cpp @ 189:964118e7e6de wasm

unit test for AlignVectorsWithRotation
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 16 Mar 2018 13:19:23 +0100
parents 45b03b04a777
children fccffbf99ba1
comparison
equal deleted inserted replaced
188:45b03b04a777 189:964118e7e6de
656 ASSERT_NEAR( 9.18901e-05, p(2,2), 0.0000000001); 656 ASSERT_NEAR( 9.18901e-05, p(2,2), 0.0000000001);
657 ASSERT_NEAR( 1, p(2,3), 0.0000001); 657 ASSERT_NEAR( 1, p(2,3), 0.0000001);
658 } 658 }
659 659
660 660
661 static bool IsEqualVector(OrthancStone::Vector a,
662 OrthancStone::Vector b)
663 {
664 if (a.size() == 3 &&
665 b.size() == 3)
666 {
667 OrthancStone::LinearAlgebra::NormalizeVector(a);
668 OrthancStone::LinearAlgebra::NormalizeVector(b);
669 return OrthancStone::LinearAlgebra::IsCloseToZero(boost::numeric::ublas::norm_2(a - b));
670 }
671 else
672 {
673 return false;
674 }
675 }
676
677
678 TEST(GeometryToolbox, AlignVectorsWithRotation)
679 {
680 OrthancStone::Vector a, b;
681 OrthancStone::Matrix r;
682
683 OrthancStone::LinearAlgebra::AssignVector(a, -200, 200, -846.63);
684 OrthancStone::LinearAlgebra::AssignVector(b, 0, 0, 1);
685
686 OrthancStone::GeometryToolbox::AlignVectorsWithRotation(r, a, b);
687 ASSERT_TRUE(OrthancStone::LinearAlgebra::IsRotationMatrix(r));
688 ASSERT_TRUE(IsEqualVector(OrthancStone::LinearAlgebra::Product(r, a), b));
689
690 OrthancStone::GeometryToolbox::AlignVectorsWithRotation(r, b, a);
691 ASSERT_TRUE(OrthancStone::LinearAlgebra::IsRotationMatrix(r));
692 ASSERT_TRUE(IsEqualVector(OrthancStone::LinearAlgebra::Product(r, b), a));
693
694 OrthancStone::LinearAlgebra::AssignVector(a, 1, 0, 0);
695 OrthancStone::LinearAlgebra::AssignVector(b, 0, 0, 1);
696 OrthancStone::GeometryToolbox::AlignVectorsWithRotation(r, a, b);
697 ASSERT_TRUE(OrthancStone::LinearAlgebra::IsRotationMatrix(r));
698 ASSERT_TRUE(IsEqualVector(OrthancStone::LinearAlgebra::Product(r, a), b));
699
700 OrthancStone::LinearAlgebra::AssignVector(a, 0, 1, 0);
701 OrthancStone::LinearAlgebra::AssignVector(b, 0, 0, 1);
702 OrthancStone::GeometryToolbox::AlignVectorsWithRotation(r, a, b);
703 ASSERT_TRUE(OrthancStone::LinearAlgebra::IsRotationMatrix(r));
704 ASSERT_TRUE(IsEqualVector(OrthancStone::LinearAlgebra::Product(r, a), b));
705
706 OrthancStone::LinearAlgebra::AssignVector(a, 0, 0, 1);
707 OrthancStone::LinearAlgebra::AssignVector(b, 0, 0, 1);
708 OrthancStone::GeometryToolbox::AlignVectorsWithRotation(r, a, b);
709 ASSERT_TRUE(OrthancStone::LinearAlgebra::IsRotationMatrix(r));
710 ASSERT_TRUE(IsEqualVector(OrthancStone::LinearAlgebra::Product(r, a), b));
711
712 OrthancStone::LinearAlgebra::AssignVector(a, 0, 0, 0);
713 OrthancStone::LinearAlgebra::AssignVector(b, 0, 0, 1);
714 ASSERT_THROW(OrthancStone::GeometryToolbox::AlignVectorsWithRotation(r, a, b), Orthanc::OrthancException);
715
716 // TODO: Deal with opposite vectors
717
718 /*
719 OrthancStone::LinearAlgebra::AssignVector(a, 0, 0, -1);
720 OrthancStone::LinearAlgebra::AssignVector(b, 0, 0, 1);
721 OrthancStone::GeometryToolbox::AlignVectorsWithRotation(r, a, b);
722 OrthancStone::LinearAlgebra::Print(r);
723 OrthancStone::LinearAlgebra::Print(boost::numeric::ublas::prod(r, a));
724 */
725 }
726
727
661 int main(int argc, char **argv) 728 int main(int argc, char **argv)
662 { 729 {
663 Orthanc::Logging::Initialize(); 730 Orthanc::Logging::Initialize();
664 Orthanc::Logging::EnableInfoLevel(true); 731 Orthanc::Logging::EnableInfoLevel(true);
665 732