35 #ifndef __CU_POLYNOMIAL_H__ 
   36 #define __CU_POLYNOMIAL_H__ 
   38 #include <cugl/math/CUMathBase.h> 
   39 #include <cugl/util/CUDebug.h> 
   69 #pragma mark Constants 
   76 #pragma mark Constructors 
  136     Polynomial(const_iterator first, const_iterator last) : std::vector<float>(first,last) {
 
  137         CUAssertLog(
isValid(), 
"The array data is invalid");
 
  150     Polynomial(
float* array, 
unsigned int size, 
unsigned int offset=0) : std::vector<float>() {
 
  151         assign(array+offset,array+size+offset);
 
  152         CUAssertLog(
isValid(), 
"The array data is invalid");
 
  161 #pragma mark Attributes 
  171     long degree()
 const  { 
return (
long)size()-1; }
 
  188     bool isValid()
 const { 
return size() == 1 || (size() > 1 && at(0) != 0); }
 
  198     bool isZero()
 const  { 
return size() == 1 && at(0) == 0; }
 
  202 #pragma mark Calculation Methods 
  261     bool roots(vector<float>& 
roots, 
float epsilon=CU_MATH_EPSILON) 
const;
 
  273         std::vector<float>::operator=(poly);
 
  285         std::vector<float>::operator=(poly);
 
  318         resize(1); at(0) = value;
 
  323 #pragma mark Comparisons 
  349         return size() == 1 && at(0) < value;
 
  377         return size() == 1 && at(0) <= value;
 
  405         return size() > 1 || at(0) > value;
 
  433         return size() > 1 || at(0) >= value;
 
  444         return size() == 1 && at(0) == value;
 
  455         return size() > 1 || at(0) != value;
 
  459 #pragma mark Operators 
  486         return *
this = (*this)*other;
 
  676 #pragma mark Friend Functions 
  745         return right.size() > 1 || right[0] > left;
 
  761         return right.size() > 1 || right[0] >= left;
 
  777         return right.size() == 1 && right[0] < left;
 
  793         return right.size() == 1 && right[0] <= left;
 
  798 #pragma mark Conversion Methods 
  813     std::string 
toString(
bool format=
true) 
const;
 
  816     operator std::string()
 const { 
return toString(); }
 
  820 #pragma mark Internal Helpers 
bool operator!=(float value) const 
Definition: CUPolynomial.h:454
 
Polynomial & operator/=(const Polynomial &other)
 
Polynomial()
Definition: CUPolynomial.h:80
 
Polynomial & set(float *array, int size)
 
Polynomial(long degree)
Definition: CUPolynomial.h:89
 
Polynomial operator%(const Polynomial &other) const 
Definition: CUPolynomial.h:560
 
Polynomial & set(float value)
Definition: CUPolynomial.h:317
 
bool operator>(float value) const 
Definition: CUPolynomial.h:404
 
Polynomial operator-() const 
 
friend bool operator>=(float left, const Polynomial &right)
Definition: CUPolynomial.h:792
 
static const Polynomial ZERO
Definition: CUPolynomial.h:71
 
Polynomial & synthetic_divide(const Polynomial &other)
 
friend bool operator<(float left, const Polynomial &right)
Definition: CUPolynomial.h:744
 
bool operator<=(float value) const 
Definition: CUPolynomial.h:376
 
std::string toString(bool format=true) const 
 
static const Polynomial ONE
Definition: CUPolynomial.h:73
 
long degree() const 
Definition: CUPolynomial.h:171
 
static Polynomial recursive_multiply(const Polynomial &a, const Polynomial &b)
 
Polynomial(const_iterator first, const_iterator last)
Definition: CUPolynomial.h:136
 
Polynomial & operator=(const Polynomial &poly)
Definition: CUPolynomial.h:272
 
Definition: CUPolynomial.h:67
 
Polynomial operator*(const Polynomial &other) const 
 
bool isValid() const 
Definition: CUPolynomial.h:188
 
Polynomial derivative() const 
 
bool isConstant() const 
Definition: CUPolynomial.h:178
 
bool operator==(float value) const 
Definition: CUPolynomial.h:443
 
Polynomial(const Polynomial &poly)
Definition: CUPolynomial.h:113
 
bool roots(vector< float > &roots, float epsilon=CU_MATH_EPSILON) const 
 
friend bool operator>(float left, const Polynomial &right)
Definition: CUPolynomial.h:776
 
Polynomial & operator%=(const Polynomial &other)
 
void solve_quadratic(vector< float > &roots) const 
 
Polynomial operator-(float value) const 
Definition: CUPolynomial.h:631
 
bool operator>=(float value) const 
Definition: CUPolynomial.h:432
 
virtual ~Polynomial()
Definition: CUPolynomial.h:158
 
bool operator<(float value) const 
Definition: CUPolynomial.h:348
 
Polynomial(float *array, unsigned int size, unsigned int offset=0)
Definition: CUPolynomial.h:150
 
Polynomial & operator*=(const Polynomial &other)
Definition: CUPolynomial.h:485
 
float evaluate(float value) const 
 
static Polynomial iterative_multiply(const Polynomial &a, const Polynomial &b)
 
Polynomial & operator+=(const Polynomial &other)
 
Polynomial operator*(float value) const 
Definition: CUPolynomial.h:642
 
friend bool operator<=(float left, const Polynomial &right)
Definition: CUPolynomial.h:760
 
Polynomial & operator=(Polynomial &&poly)
Definition: CUPolynomial.h:284
 
bool operator<(const Polynomial &p) const 
 
Polynomial operator%(float value) const 
Definition: CUPolynomial.h:664
 
Polynomial & operator=(float value)
Definition: CUPolynomial.h:296
 
bool isZero() const 
Definition: CUPolynomial.h:198
 
Polynomial & operator-=(const Polynomial &other)
 
bool operator>=(const Polynomial &p) const 
 
Definition: CUAction.h:51
 
bool bairstow_factor(Polynomial &quad, Polynomial &result, float epsilon) const 
 
Polynomial operator-(const Polynomial &other) const 
Definition: CUPolynomial.h:529
 
Polynomial(long degree, float value)
Definition: CUPolynomial.h:105
 
Polynomial operator+(const Polynomial &other) const 
Definition: CUPolynomial.h:518
 
Polynomial operator/(const Polynomial &other) const 
Definition: CUPolynomial.h:549
 
bool operator>(const Polynomial &p) const 
 
Polynomial operator+(float value) const 
Definition: CUPolynomial.h:620
 
Polynomial(Polynomial &&poly)
Definition: CUPolynomial.h:121
 
bool operator<=(const Polynomial &p) const 
 
Polynomial operator/(float value) const 
Definition: CUPolynomial.h:653