16 #ifndef SURGSIM_MATH_POLYNOMIAL_H 17 #define SURGSIM_MATH_POLYNOMIAL_H 28 double polynomial_epsilon = 1.0e-09;
39 bool isNearZero(
const T& value,
const T& epsilon = static_cast<T>(polynomial_epsilon));
49 static_assert(N >= 0,
"Polynomials must have degree >= 0.");
50 static_assert(N <= 3, "Polynomials of degree > 3 are not yet supported.
"); 56 class Polynomial<T, 0> 64 explicit Polynomial(const T& a0); 69 T evaluate(const T& x) const; 74 T operator()(const T& x) const; 78 T& operator[](const size_t i); 79 const T& operator[](const size_t i) const; 80 Polynomial<T, 0> operator- () const; 81 Polynomial<T, 0> operator+ (const Polynomial<T, 0>& rhs) const; 82 Polynomial<T, 0>& operator+= (const Polynomial<T, 0>& rhs); 83 Polynomial<T, 0> operator- (const Polynomial<T, 0>& rhs) const; 84 Polynomial<T, 0>& operator-= (const Polynomial<T, 0>& rhs); 89 bool isNearZero(const T& epsilon = static_cast<T>(polynomial_epsilon)) const; 95 bool isApprox(const Polynomial<T, 0>& p, const T& epsilon) const; 99 T getCoefficient(size_t i) const; 105 void setCoefficient(size_t i, const T& value); 116 template <typename T> 117 class Polynomial<T, 1> 126 Polynomial(const T& a0, const T& a1); 131 T evaluate(const T& x) const; 136 T operator()(const T& x) const; 140 T& operator[](const size_t i); 141 const T& operator[](const size_t i) const; 142 Polynomial<T, 1> operator- () const; 143 Polynomial<T, 1> operator+ (const Polynomial<T, 1>& rhs) const; 144 Polynomial<T, 1>& operator+= (const Polynomial<T, 1>& rhs); 145 Polynomial<T, 1> operator- (const Polynomial<T, 1>& rhs) const; 146 Polynomial<T, 1>& operator-= (const Polynomial<T, 1>& rhs); 150 Polynomial<T, 0> derivative() const; 154 bool isNearZero(const T& epsilon = static_cast<T>(polynomial_epsilon)) const; 160 bool isApprox(const Polynomial<T, 1>& p, const T& epsilon) const; 164 T getCoefficient(size_t i) const; 170 void setCoefficient(size_t i, const T& value); 182 template <typename T> 183 class Polynomial<T, 2> 193 Polynomial(const T& a0, const T& a1, const T& a2); 197 T discriminant() const; 202 T evaluate(const T& x) const; 207 T operator()(const T& x) const; 211 T& operator[](const size_t i); 212 const T& operator[](const size_t i) const; 213 Polynomial<T, 2> operator- () const; 214 Polynomial<T, 2> operator+ (const Polynomial<T, 2>& rhs) const; 215 Polynomial<T, 2>& operator+= (const Polynomial<T, 2>& rhs); 216 Polynomial<T, 2> operator- (const Polynomial<T, 2>& rhs) const; 217 Polynomial<T, 2>& operator-= (const Polynomial<T, 2>& rhs); 221 Polynomial<T, 1> derivative() const; 225 bool isNearZero(const T& epsilon = static_cast<T>(polynomial_epsilon)) const; 231 bool isApprox(const Polynomial<T, 2>& p, const T& epsilon) const; 235 T getCoefficient(size_t i) const; 241 void setCoefficient(size_t i, const T& value); 254 template <typename T> 255 class Polynomial<T, 3> 266 Polynomial(const T& a0, const T& a1, const T& a2, const T& a3); 271 T evaluate(const T& x) const; 276 T operator()(const T& x) const; 280 T& operator[](const size_t i); 281 const T& operator[](const size_t i) const; 282 Polynomial<T, 3> operator- () const; 283 Polynomial<T, 3> operator+ (const Polynomial<T, 3>& rhs) const; 284 Polynomial<T, 3>& operator+= (const Polynomial<T, 3>& rhs); 285 Polynomial<T, 3> operator- (const Polynomial<T, 3>& rhs) const; 286 Polynomial<T, 3>& operator-= (const Polynomial<T, 3>& rhs); 290 Polynomial<T, 2> derivative() const; 294 bool isNearZero(const T& epsilon = static_cast<T>(polynomial_epsilon)) const; 300 bool isApprox(const Polynomial<T, 3>& p, const T& epsilon) const; 304 T getCoefficient(size_t i) const; 310 void setCoefficient(size_t i, const T& value); 333 template <typename T, int N, int M> 334 Polynomial < T, N + M > operator*(const Polynomial<T, N>& p, const Polynomial<T, M>& q); 341 template <typename T> 342 Polynomial<T, 2> operator*(const Polynomial<T, 1>& p, const Polynomial<T, 1>& q); 349 template <typename T> 350 Polynomial<T, 3> operator*(const Polynomial<T, 2>& p, const Polynomial<T, 1>& q); 357 template <typename T> 358 Polynomial<T, 3> operator*(const Polynomial<T, 1>& p, const Polynomial<T, 2>& q); 364 template <typename T> 365 Polynomial<T, 0> square(const Polynomial<T, 0>& p); 371 template <typename T> 372 Polynomial<T, 2> square(const Polynomial<T, 1>& p); 380 template <typename T, int N> 381 std::ostream& operator<<(std::ostream& stream, const Polynomial<T, N>& p); 388 #endif // SURGSIM_MATH_POLYNOMIAL_H Wraps glewInit() to separate the glew opengl definitions from the osg opengl definitions only imgui n...
Definition: AddRandomSphereBehavior.cpp:36
Polynomial<T, N> defines the concept of an N degree polynomial with type T coefficients and provides ...
Definition: Polynomial.h:47