Mercurial > hg > orthanc-stone
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 |