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 #ifndef PCL_POLYNOMIAL_CALCULATIONS_H_
00037 #define PCL_POLYNOMIAL_CALCULATIONS_H_
00038 
00039 #include <pcl/common/eigen.h>
00040 #include <pcl/common/bivariate_polynomial.h>
00041 
00042 namespace pcl 
00043 {
00049   template <typename real>
00050   class PolynomialCalculationsT 
00051   {
00052     public:
00053       
00054       PolynomialCalculationsT ();
00055       ~PolynomialCalculationsT ();
00056       
00057       
00059       struct Parameters
00060       {
00061         Parameters () : zero_value (), sqr_zero_value () { setZeroValue (1e-6);}
00063         void
00064         setZeroValue (real new_zero_value);
00065 
00066         real zero_value;       
00067         real sqr_zero_value;   
00068       };
00069       
00070       
00073       inline void
00074       solveQuarticEquation (real a, real b, real c, real d, real e, std::vector<real>& roots) const;
00075 
00078       inline void
00079       solveCubicEquation (real a, real b, real c, real d, std::vector<real>& roots) const;
00080 
00083       inline void
00084       solveQuadraticEquation (real a, real b, real c, std::vector<real>& roots) const;
00085 
00087       inline void
00088       solveLinearEquation (real a, real b, std::vector<real>& roots) const;
00089       
00095       inline BivariatePolynomialT<real>
00096       bivariatePolynomialApproximation (std::vector<Eigen::Matrix<real, 3, 1> >& samplePoints,
00097                                         unsigned int polynomial_degree, bool& error) const;
00098       
00100       inline bool
00101       bivariatePolynomialApproximation (std::vector<Eigen::Matrix<real, 3, 1> >& samplePoints,
00102                                         unsigned int polynomial_degree, BivariatePolynomialT<real>& ret) const;
00103 
00105       inline void
00106       setZeroValue (real new_zero_value) { parameters_.setZeroValue(new_zero_value); }
00107       
00108     protected:  
00109       
00111       inline bool
00112       isNearlyZero (real d) const 
00113       { 
00114         return (fabs (d) < parameters_.zero_value);
00115       }
00116       
00118       inline bool
00119       sqrtIsNearlyZero (real d) const 
00120       { 
00121         return (fabs (d) < parameters_.sqr_zero_value);
00122       }
00123       
00124       
00125       Parameters parameters_;
00126   };
00127 
00128   typedef PolynomialCalculationsT<double> PolynomialCalculationsd;
00129   typedef PolynomialCalculationsT<float>  PolynomialCalculations;
00130 
00131 }  
00132 
00133 #include <pcl/common/impl/polynomial_calculations.hpp>
00134 
00135 #endif