diff --git a/src/bspline.cpp b/src/bspline.cpp new file mode 100644 index 0000000..2537d1b --- /dev/null +++ b/src/bspline.cpp @@ -0,0 +1,50 @@ +#include "bspline.h" + +BSpline::BSpline(int k, double step, int np1) +{ + // Initialisation des valeurs + // Ordre k = 2 + _k = k; + _step = step; + _np1 = np1; + // Vecteur Nodal Uniforme de np1 valeurs + for(int i = 0; i < k+np1; ++i) + _vecteurNodal.push_back(i); + // Points de contrĂ´le + _pointsDeControle.push_back(glm::vec3(-3, 0, 0)); + _pointsDeControle.push_back(glm::vec3(-1, 0, 0)); + _pointsDeControle.push_back(glm::vec3(-1, 0, 2)); + _pointsDeControle.push_back(glm::vec3( 1, 0, 2)); + _pointsDeControle.push_back(glm::vec3( 1, 0, 0)); + _pointsDeControle.push_back(glm::vec3( 3, 0, 0)); + + computeSpline(); +} + +void BSpline::computeSpline() +{ + // Init + int dec = 0, i = _k; + double u = 0; + + std::vector vecteursPointsControle (_np1); + + for(u = _k - 1; u < _np1; u += _step){ + while(u > _vecteurNodal[i]){ + ++dec; + ++i; + } + + for(int i = 0; i < _k; i++){ + vecteursPointsControle[i] = _pointsDeControle[dec + i]; + } + + std::vector newVertices = floraison(u, dec, _k); + _vertices.insert(_vertices.end(), newVertices.begin(), newVertices.end()); + } +} + +std::vector BSpline::floraison(double u, int dec, int k) +{ + return std::vector({0.0f, 0.0f, 0.0f}); +} diff --git a/src/bspline.h b/src/bspline.h new file mode 100644 index 0000000..0ec4f78 --- /dev/null +++ b/src/bspline.h @@ -0,0 +1,26 @@ +#ifndef BSPLINE_H +#define BSPLINE_H + +#include "opengl_stuff.h" +#include + + +class BSpline +{ +public: + BSpline(int k = 2, double step = 0.1, int np1 = 6); + +private: + std::vector _vecteurNodal; + std::vector _pointsDeControle; + int _k; + int _np1; + double _step; + + std::vector _vertices; + + void computeSpline(); + std::vector floraison(double u, int dec, int k); +}; + +#endif // BSPLINE_H