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
00037
00038
00039
00040
00041
00042 #ifndef PCL_POISSON_PPOLYNOMIAL_H_
00043 #define PCL_POISSON_PPOLYNOMIAL_H_
00044
00045 #include <vector>
00046 #include "polynomial.h"
00047
00048
00049 namespace pcl
00050 {
00051 namespace poisson
00052 {
00053 template <int Degree>
00054 class StartingPolynomial
00055 {
00056 public:
00057 Polynomial<Degree> p;
00058 double start;
00059
00060 StartingPolynomial () : p (), start () {}
00061
00062 template <int Degree2> StartingPolynomial<Degree+Degree2> operator* (const StartingPolynomial<Degree2>&p) const;
00063 StartingPolynomial scale (const double&s) const;
00064 StartingPolynomial shift (const double&t) const;
00065 int operator < (const StartingPolynomial &sp) const;
00066 static int Compare (const void *v1,const void *v2);
00067 };
00068
00069 template <int Degree>
00070 class PPolynomial
00071 {
00072 public:
00073 size_t polyCount;
00074 StartingPolynomial<Degree>*polys;
00075
00076 PPolynomial (void);
00077 PPolynomial (const PPolynomial<Degree>&p);
00078 ~PPolynomial (void);
00079
00080 PPolynomial& operator = (const PPolynomial&p);
00081
00082 int size (void) const;
00083
00084 void set (const size_t&size);
00085
00086 void set (StartingPolynomial<Degree>*sps,const int&count);
00087 void reset (const size_t&newSize);
00088
00089
00090 double operator() (const double &t) const;
00091 double integral (const double &tMin,const double &tMax) const;
00092 double Integral (void) const;
00093
00094 template <int Degree2> PPolynomial<Degree>& operator = (const PPolynomial<Degree2>&p);
00095
00096 PPolynomial operator + (const PPolynomial&p) const;
00097 PPolynomial operator - (const PPolynomial &p) const;
00098
00099 template <int Degree2> PPolynomial<Degree+Degree2> operator * (const Polynomial<Degree2> &p) const;
00100
00101 template <int Degree2> PPolynomial<Degree+Degree2> operator* (const PPolynomial<Degree2>&p) const;
00102
00103
00104 PPolynomial& operator += (const double&s);
00105 PPolynomial& operator -= (const double&s);
00106 PPolynomial& operator *= (const double&s);
00107 PPolynomial& operator /= (const double&s);
00108 PPolynomial operator + (const double&s) const;
00109 PPolynomial operator - (const double&s) const;
00110 PPolynomial operator* (const double&s) const;
00111 PPolynomial operator / (const double &s) const;
00112
00113 PPolynomial& addScaled (const PPolynomial &poly,const double &scale);
00114
00115 PPolynomial scale (const double &s) const;
00116 PPolynomial shift (const double &t) const;
00117
00118 PPolynomial<Degree-1> derivative (void) const;
00119 PPolynomial<Degree+1> integral (void) const;
00120
00121 void getSolutions (const double &c,
00122 std::vector<double> &roots,
00123 const double &EPS,
00124 const double &min =- DBL_MAX,
00125 const double &max=DBL_MAX) const;
00126
00127 void printnl (void) const;
00128
00129 PPolynomial<Degree+1> MovingAverage (const double &radius);
00130
00131 static PPolynomial ConstantFunction (const double &width=0.5);
00132 static PPolynomial GaussianApproximation (const double &width=0.5);
00133 void write (FILE *fp,
00134 const int &samples,
00135 const double &min,
00136 const double &max) const;
00137 };
00138
00139
00140 }
00141 }
00142
00143 #include <pcl/surface/impl/poisson/ppolynomial.hpp>
00144
00145 #endif