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