| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef P_POLYNOMIAL_INCLUDED |
| #define P_POLYNOMIAL_INCLUDED |
| #include <vector> |
| #include "Polynomial.h" |
| #include "Array.h" |
|
|
| template< int Degree > |
| class StartingPolynomial |
| { |
| public: |
| Polynomial< Degree > p; |
| double start; |
|
|
| template< int Degree2 > |
| StartingPolynomial< Degree+Degree2 > operator * ( const StartingPolynomial< Degree2 >& p ) const; |
| StartingPolynomial scale( double s ) const; |
| StartingPolynomial shift( double t ) const; |
| int operator < ( const StartingPolynomial& sp ) const; |
| static int Compare( const void* v1 , const void* v2 ); |
| }; |
|
|
| template< int Degree > |
| class PPolynomial |
| { |
| public: |
| size_t polyCount; |
| Pointer( StartingPolynomial< Degree > ) polys; |
|
|
| PPolynomial( void ); |
| PPolynomial( const PPolynomial<Degree>& p ); |
| ~PPolynomial( void ); |
|
|
| PPolynomial& operator = ( const PPolynomial& p ); |
|
|
| int size( void ) const; |
|
|
| void set( size_t size ); |
| |
| void set( Pointer( StartingPolynomial<Degree> ) sps , int count ); |
| void reset( size_t newSize ); |
| PPolynomial& compress( double delta=0. ); |
|
|
|
|
| double operator()( double t ) const; |
| double integral( double tMin , double tMax ) const; |
| double Integral( void ) const; |
|
|
| template< int Degree2 > PPolynomial< Degree >& operator = ( const PPolynomial< Degree2 >& p ); |
|
|
| PPolynomial operator + ( const PPolynomial& p ) const; |
| PPolynomial operator - ( const PPolynomial& p ) const; |
|
|
| template< int Degree2 > PPolynomial< Degree+Degree2 > operator * ( const Polynomial< Degree2 >& p ) const; |
| template< int Degree2 > PPolynomial< Degree+Degree2 > operator * ( const PPolynomial< Degree2 >& p) const; |
|
|
|
|
| PPolynomial& operator += ( double s ); |
| PPolynomial& operator -= ( double s ); |
| PPolynomial& operator *= ( double s ); |
| PPolynomial& operator /= ( double s ); |
| PPolynomial operator + ( double s ) const; |
| PPolynomial operator - ( double s ) const; |
| PPolynomial operator * ( double s ) const; |
| PPolynomial operator / ( double s ) const; |
|
|
| PPolynomial& addScaled( const PPolynomial& poly , double scale ); |
|
|
| PPolynomial scale( double s ) const; |
| PPolynomial shift( double t ) const; |
| PPolynomial reflect( double r=0. ) const; |
|
|
| PPolynomial< Degree-1 > derivative(void) const; |
| PPolynomial< Degree+1 > integral(void) const; |
|
|
| void getSolutions( double c , std::vector< double >& roots , double EPS , double min=-DBL_MAX , double max=DBL_MAX ) const; |
|
|
| void printnl( void ) const; |
|
|
| PPolynomial< Degree+1 > MovingAverage( double radius ) const; |
| static PPolynomial BSpline( double radius=0.5 ); |
|
|
| void write( FILE* fp , int samples , double min , double max ) const; |
| }; |
| #include "PPolynomial.inl" |
| #endif |
|
|