35 #ifndef __CU_POLYNOMIAL_H__
36 #define __CU_POLYNOMIAL_H__
38 #include "CUMathBase.h"
39 #include "../util/CUDebug.h"
69 #pragma mark Constants
76 #pragma mark Constructors
128 Polynomial(const_iterator first, const_iterator last) : vector<float>(first,last) {
129 CUAssertLog(
isValid(),
"The array data is invalid");
142 Polynomial(
float* array,
unsigned int size,
unsigned int offset=0) : vector<float>() {
143 assign(array+offset,array+size+offset);
144 CUAssertLog(
isValid(),
"The array data is invalid");
153 #pragma mark Attributes
163 long degree()
const {
return (
long)size()-1; }
180 bool isValid()
const {
return size() == 1 || (size() > 1 && at(0) != 0); }
190 bool isZero()
const {
return size() == 1 && at(0) == 0; }
194 #pragma mark Calculation Methods
253 bool roots(vector<float>&
roots,
float epsilon=CU_MATH_EPSILON)
const;
286 resize(1); at(0) = value;
291 #pragma mark Comparisons
317 return size() == 1 && at(0) < value;
345 return size() == 1 && at(0) <= value;
373 return size() > 1 || at(0) > value;
401 return size() > 1 || at(0) >= value;
412 return size() == 1 && at(0) == value;
423 return size() > 1 || at(0) != value;
427 #pragma mark Operators
454 return *
this = (*this)*other;
644 #pragma mark Friend Functions
713 return right.size() > 1 || right[0] > left;
729 return right.size() > 1 || right[0] >= left;
745 return right.size() == 1 && right[0] < left;
761 return right.size() == 1 && right[0] <= left;
766 #pragma mark Conversion Methods
781 std::string
toString(
bool format=
true)
const;
784 operator std::string()
const {
return toString(); }
788 #pragma mark Internal Helpers
bool operator!=(float value) const
Definition: CUPolynomial.h:422
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:528
Polynomial & set(float value)
Definition: CUPolynomial.h:285
bool operator>(float value) const
Definition: CUPolynomial.h:372
Polynomial operator-() const
friend bool operator>=(float left, const Polynomial &right)
Definition: CUPolynomial.h:760
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:712
bool operator<=(float value) const
Definition: CUPolynomial.h:344
std::string toString(bool format=true) const
static const Polynomial ONE
Definition: CUPolynomial.h:73
long degree() const
Definition: CUPolynomial.h:163
static Polynomial recursive_multiply(const Polynomial &a, const Polynomial &b)
Polynomial(const_iterator first, const_iterator last)
Definition: CUPolynomial.h:128
Definition: CUPolynomial.h:67
Polynomial operator*(const Polynomial &other) const
bool isValid() const
Definition: CUPolynomial.h:180
Polynomial derivative() const
bool isConstant() const
Definition: CUPolynomial.h:170
bool operator==(float value) const
Definition: CUPolynomial.h:411
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:744
Polynomial & operator%=(const Polynomial &other)
void solve_quadratic(vector< float > &roots) const
Polynomial operator-(float value) const
Definition: CUPolynomial.h:599
bool operator>=(float value) const
Definition: CUPolynomial.h:400
virtual ~Polynomial()
Definition: CUPolynomial.h:150
bool operator<(float value) const
Definition: CUPolynomial.h:316
Polynomial(float *array, unsigned int size, unsigned int offset=0)
Definition: CUPolynomial.h:142
Polynomial & operator*=(const Polynomial &other)
Definition: CUPolynomial.h:453
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:610
friend bool operator<=(float left, const Polynomial &right)
Definition: CUPolynomial.h:728
bool operator<(const Polynomial &p) const
Polynomial operator%(float value) const
Definition: CUPolynomial.h:632
Polynomial & operator=(float value)
Definition: CUPolynomial.h:264
bool isZero() const
Definition: CUPolynomial.h:190
Polynomial & operator-=(const Polynomial &other)
bool operator>=(const Polynomial &p) const
Definition: CUAnimationNode.h:52
bool bairstow_factor(Polynomial &quad, Polynomial &result, float epsilon) const
Polynomial operator-(const Polynomial &other) const
Definition: CUPolynomial.h:497
Polynomial(long degree, float value)
Definition: CUPolynomial.h:105
Polynomial operator+(const Polynomial &other) const
Definition: CUPolynomial.h:486
Polynomial operator/(const Polynomial &other) const
Definition: CUPolynomial.h:517
bool operator>(const Polynomial &p) const
Polynomial operator+(float value) const
Definition: CUPolynomial.h:588
bool operator<=(const Polynomial &p) const
Polynomial operator/(float value) const
Definition: CUPolynomial.h:621