Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "PointMatcher.h"
00037 #include "PointMatcherPrivate.h"
00038
00040 template<typename T>
00041 PointMatcher<T>::TransformationChecker::TransformationChecker()
00042 {}
00043
00045 template<typename T>
00046 PointMatcher<T>::TransformationChecker::TransformationChecker(const std::string& className, const ParametersDoc paramsDoc, const Parameters& params):
00047 Parametrizable(className,paramsDoc,params)
00048 {}
00049
00051 template<typename T>
00052 PointMatcher<T>::TransformationChecker::~TransformationChecker()
00053 {}
00054
00056 template<typename T>
00057 const typename PointMatcher<T>::Vector& PointMatcher<T>::TransformationChecker::getLimits() const
00058 {
00059 return limits;
00060 }
00061
00063 template<typename T>
00064 const typename PointMatcher<T>::Vector& PointMatcher<T>::TransformationChecker::getConditionVariables() const
00065 {
00066 return conditionVariables;
00067 }
00068
00070 template<typename T>
00071 const typename PointMatcher<T>::TransformationChecker::StringVector& PointMatcher<T>::TransformationChecker::getLimitNames() const
00072 {
00073 return limitNames;
00074 }
00075
00077 template<typename T>
00078 const typename PointMatcher<T>::TransformationChecker::StringVector& PointMatcher<T>::TransformationChecker::getConditionVariableNames() const
00079 {
00080 return conditionVariableNames;
00081 }
00082
00084 template<typename T>
00085 typename PointMatcher<T>::Vector PointMatcher<T>::TransformationChecker::matrixToAngles(const TransformationParameters& parameters)
00086 {
00087 Vector angles;
00088 if(parameters.rows() == 4)
00089 {
00090 angles = Vector::Zero(3);
00091
00092 angles(0) = atan2(parameters(2,0), parameters(2,1));
00093 angles(1) = acos(parameters(2,2));
00094 angles(2) = -atan2(parameters(0,2), parameters(1,2));
00095 }
00096 else
00097 {
00098 angles = Vector::Zero(1);
00099
00100 angles(0) = acos(parameters(0,0));
00101 }
00102
00103 return angles;
00104 }
00105
00106 template struct PointMatcher<float>::TransformationChecker;
00107 template struct PointMatcher<double>::TransformationChecker;
00108
00109
00111 template<typename T>
00112 void PointMatcher<T>::TransformationCheckers::init(const TransformationParameters& parameters, bool& iterate)
00113 {
00114 for (TransformationCheckersIt it = this->begin(); it != this->end(); ++it)
00115 (*it)->init(parameters, iterate);
00116 }
00117
00119 template<typename T>
00120 void PointMatcher<T>::TransformationCheckers::check(const TransformationParameters& parameters, bool& iterate)
00121 {
00122 for (TransformationCheckersIt it = this->begin(); it != this->end(); ++it)
00123 (*it)->check(parameters, iterate);
00124 }
00125
00126 template struct PointMatcher<float>::TransformationCheckers;
00127 template struct PointMatcher<double>::TransformationCheckers;