49 memset(coefficients,0,
sizeof(
double)*(Degree+1));
50 for(
int i=0;i<=Degree && i<=Degree2;i++){coefficients[i]=P.
coefficients[i];}
57 int d=Degree<Degree2?Degree:Degree2;
58 memset(coefficients,0,
sizeof(
double)*(Degree+1));
59 memcpy(coefficients,p.
coefficients,
sizeof(
double)*(d+1));
66 for(
int i=0;i<Degree;i++){p.
coefficients[i]=coefficients[i+1]*(i+1);}
74 for(
int i=0;i<=Degree;i++){p.
coefficients[i+1]=coefficients[i]/(i+1);}
82 double v=coefficients[Degree];
83 for(
int d=Degree-1 ; d>=0 ; d-- ) v = v*t + coefficients[d];
93 for(
int i=0;i<=Degree;i++){
94 v+=coefficients[i]*(t2-t1)/(i+1);
95 if(t1!=-DBL_MAX && t1!=DBL_MAX){t1*=tMin;}
96 if(t2!=-DBL_MAX && t2!=DBL_MAX){t2*=tMax;}
102 for(
int i=0;i<=Degree;i++){
if(coefficients[i]!=p.
coefficients[i]){
return 0;}}
107 for(
int i=0;i<=Degree;i++){
if(coefficients[i]==p.
coefficients[i]){
return 0;}}
112 for(
int i=0;i<=Degree;i++){
if(coefficients[i]!=0){
return 0;}}
120 for(
int i=0;i<=Degree;i++){coefficients[i]+=p.
coefficients[i]*s;}
125 for(
int i=0;i<=Degree;i++){coefficients[i]+=p.
coefficients[i];}
130 for(
int i=0;i<=Degree;i++){coefficients[i]-=p.
coefficients[i];}
179 template<
int Degree2>
201 for(
int i=0;i<=Degree;i++){coefficients[i]*=s;}
207 for(
int i=0;i<=Degree;i++){coefficients[i]/=s;}
228 for(
int i=0;i<=Degree;i++){q.
coefficients[i]=coefficients[i]*s;}
235 for(
int i=0 ; i<=Degree ; i++ ) q.
coefficients[i] = coefficients[i]/s;
243 for(
int i=0;i<=Degree;i++){
253 for(
int i=0;i<=Degree;i++){
255 for(
int j=i;j>=0;j--){
265 for(
int j=0;j<=Degree;j++){
266 printf(
"%6.4f x^%d ",coefficients[j],j);
267 if(j<Degree && coefficients[j+1]>=0){printf(
"+");}
279 rCount=
Factor(coefficients[1],coefficients[0]-c,r,EPS);
282 rCount=
Factor(coefficients[2],coefficients[1],coefficients[0]-c,r,EPS);
285 rCount=
Factor(coefficients[3],coefficients[2],coefficients[1],coefficients[0]-c,r,EPS);
291 printf(
"Can't solve polynomial of degree: %d\n",Degree);
293 for(
int i=0;i<rCount;i++){
294 if(fabs(r[i][1])<=EPS){
295 roots.push_back(r[i][0]);
306 template<
int Degree >
Polynomial shift(double t) const
void getSolutions(double c, std::vector< double > &roots, double EPS) const
Polynomial & operator+=(const Polynomial &p)
double operator()(double t) const
static void Scale(const Polynomial &p, double w, Polynomial &q)
Polynomial< Degree-1 > derivative(void) const
Polynomial & operator*=(double s)
Polynomial & addScaled(const Polynomial &p, double scale)
int operator==(const Polynomial &p) const
static void AddScaled(const Polynomial &p1, double w1, const Polynomial &p2, double w2, Polynomial &q)
Polynomial & operator-=(const Polynomial &p)
static void Subtract(const Polynomial &p1, const Polynomial &p2, Polynomial &q)
double integral(double tMin, double tMax) const
Polynomial operator+(const Polynomial &p) const
Polynomial< Degree+Degree2 > operator*(const Polynomial< Degree2 > &p) const
static Polynomial BSplineComponent(int i)
Polynomial operator/(double s) const
Polynomial & operator/=(double s)
Polynomial< Degree+1 > integral(void) const
static void Negate(const Polynomial &in, Polynomial &out)
Polynomial operator-(void) const
Polynomial scale(double s) const
int operator!=(const Polynomial &p) const
PCL_EXPORTS int Factor(double a1, double a0, double roots[1][2], double EPS)
Polynomial & operator=(const Polynomial< Degree2 > &p)
double coefficients[Degree+1]