bernstein.h
Go to the documentation of this file.
1
9#ifndef _CLASS_BERNSTEIN
10#define _CLASS_BERNSTEIN
11
12#include <math.h>
13
14#include <stdexcept>
15#include <vector>
16
17#include "MathDefs.h"
18#include "curve_abc.h"
19
20namespace spline {
24unsigned int fact(const unsigned int n) {
25 assert(n >= 0);
26 int res = 1;
27 for (int i = 2; i <= n; ++i) res *= i;
28 return res;
29}
30
34unsigned int bin(const unsigned int n, const unsigned int k) {
35 return fact(n) / (fact(k) * fact(n - k));
36}
37
41template <typename Numeric = double>
42struct Bern {
43 Bern(const unsigned int m, const unsigned int i)
44 : m_minus_i(m - i), i_(i), bin_m_i_(bin(m, i)) {}
45
46 ~Bern() {}
47
48 Numeric operator()(const Numeric u) const {
49 assert(u >= 0. && u <= 1.);
50 return bin_m_i_ * (pow(u, i_)) * pow((1 - u), m_minus_i);
51 }
52
56};
57
61template <typename Numeric>
62std::vector<Bern<Numeric> > makeBernstein(const unsigned int n) {
63 std::vector<Bern<Numeric> > res;
64 for (unsigned int i = 0; i <= n; ++i) res.push_back(Bern<Numeric>(n, i));
65 return res;
66}
67} // namespace spline
68#endif //_CLASS_BERNSTEIN
double Numeric
Definition: effector_spline.h:26
Definition: bernstein.h:20
unsigned int fact(const unsigned int n)
Computes factorial of a number.
Definition: bernstein.h:24
unsigned int bin(const unsigned int n, const unsigned int k)
Computes a binomal coefficient.
Definition: bernstein.h:34
std::vector< Bern< Numeric > > makeBernstein(const unsigned int n)
Computes all Bernstein polynomes for a certain degree.
Definition: bernstein.h:62
Definition: bernstein.h:42
~Bern()
Definition: bernstein.h:46
Numeric operator()(const Numeric u) const
Definition: bernstein.h:48
Bern(const unsigned int m, const unsigned int i)
Definition: bernstein.h:43
Numeric i_
Definition: bernstein.h:54
Numeric m_minus_i
Definition: bernstein.h:53
Numeric bin_m_i_
Definition: bernstein.h:55