Alex Pirciu
/
BFMC
a
include/BezierCurve/beziercurve.hpp@1:ceee5a608e7c, 2019-03-28 (annotated)
- Committer:
- alexpirciu
- Date:
- Thu Mar 28 07:44:42 2019 +0000
- Revision:
- 1:ceee5a608e7c
assa
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alexpirciu | 1:ceee5a608e7c | 1 | /** |
alexpirciu | 1:ceee5a608e7c | 2 | ****************************************************************************** |
alexpirciu | 1:ceee5a608e7c | 3 | * @file BezierCurve.hpp |
alexpirciu | 1:ceee5a608e7c | 4 | * @author RBRO/PJ-IU |
alexpirciu | 1:ceee5a608e7c | 5 | * @version V1.0.0 |
alexpirciu | 1:ceee5a608e7c | 6 | * @date day-month-year |
alexpirciu | 1:ceee5a608e7c | 7 | * @brief This file contains the class declaration for the Bezier Curve |
alexpirciu | 1:ceee5a608e7c | 8 | * methods. |
alexpirciu | 1:ceee5a608e7c | 9 | ****************************************************************************** |
alexpirciu | 1:ceee5a608e7c | 10 | */ |
alexpirciu | 1:ceee5a608e7c | 11 | |
alexpirciu | 1:ceee5a608e7c | 12 | /* include guard */ |
alexpirciu | 1:ceee5a608e7c | 13 | #ifndef BEZIERCURVE_HPP |
alexpirciu | 1:ceee5a608e7c | 14 | #define BEZIERCURVE_HPP |
alexpirciu | 1:ceee5a608e7c | 15 | |
alexpirciu | 1:ceee5a608e7c | 16 | /* complex numbers in cartesian form and several functions and overloads to operate with them */ |
alexpirciu | 1:ceee5a608e7c | 17 | #include <complex> |
alexpirciu | 1:ceee5a608e7c | 18 | #include <BezierCurve/PolynomialFunction.hpp> |
alexpirciu | 1:ceee5a608e7c | 19 | |
alexpirciu | 1:ceee5a608e7c | 20 | #define BEZIER_ORDER 3 |
alexpirciu | 1:ceee5a608e7c | 21 | |
alexpirciu | 1:ceee5a608e7c | 22 | namespace math{ |
alexpirciu | 1:ceee5a608e7c | 23 | /** |
alexpirciu | 1:ceee5a608e7c | 24 | * @brief It implements the functionality of a Bezier curve. The points on the curve are represented by complex numbers and the input value of the curve have to belong to the interval [0,1]. |
alexpirciu | 1:ceee5a608e7c | 25 | * |
alexpirciu | 1:ceee5a608e7c | 26 | * @tparam T The type of the Bezier curve. |
alexpirciu | 1:ceee5a608e7c | 27 | */ |
alexpirciu | 1:ceee5a608e7c | 28 | template<class T> |
alexpirciu | 1:ceee5a608e7c | 29 | class BezierCurve |
alexpirciu | 1:ceee5a608e7c | 30 | { |
alexpirciu | 1:ceee5a608e7c | 31 | public: |
alexpirciu | 1:ceee5a608e7c | 32 | /* Constructors */ |
alexpirciu | 1:ceee5a608e7c | 33 | BezierCurve(); |
alexpirciu | 1:ceee5a608e7c | 34 | BezierCurve(std::complex<T> points[BEZIER_ORDER+1]); |
alexpirciu | 1:ceee5a608e7c | 35 | BezierCurve(std::complex<T> a,std::complex<T> b,std::complex<T> c,std::complex<T> d); |
alexpirciu | 1:ceee5a608e7c | 36 | /* Destructor */ |
alexpirciu | 1:ceee5a608e7c | 37 | virtual ~BezierCurve(); |
alexpirciu | 1:ceee5a608e7c | 38 | /* Set curve */ |
alexpirciu | 1:ceee5a608e7c | 39 | void setBezierCurve(std::complex<T> a,std::complex<T> b,std::complex<T> c,std::complex<T> d); |
alexpirciu | 1:ceee5a608e7c | 40 | /* Get value */ |
alexpirciu | 1:ceee5a608e7c | 41 | std::complex<T> getValue(float input_value); |
alexpirciu | 1:ceee5a608e7c | 42 | /* First order derivate value */ |
alexpirciu | 1:ceee5a608e7c | 43 | std::complex<T> get_FO_DerivateValue(float input_value); |
alexpirciu | 1:ceee5a608e7c | 44 | /* Second order derivate value */ |
alexpirciu | 1:ceee5a608e7c | 45 | std::complex<T> get_SO_DerivateValue(float input_value); |
alexpirciu | 1:ceee5a608e7c | 46 | |
alexpirciu | 1:ceee5a608e7c | 47 | math::PolynomialFunction<std::complex<T>,BEZIER_ORDER > getBezierCurve(); |
alexpirciu | 1:ceee5a608e7c | 48 | math::PolynomialFunction<std::complex<T>,BEZIER_ORDER-1> getFODerivate(); |
alexpirciu | 1:ceee5a608e7c | 49 | math::PolynomialFunction<std::complex<T>,BEZIER_ORDER-2> getSODerivate(); |
alexpirciu | 1:ceee5a608e7c | 50 | |
alexpirciu | 1:ceee5a608e7c | 51 | protected: |
alexpirciu | 1:ceee5a608e7c | 52 | |
alexpirciu | 1:ceee5a608e7c | 53 | private: |
alexpirciu | 1:ceee5a608e7c | 54 | // PRIVATE FUNCTIONS |
alexpirciu | 1:ceee5a608e7c | 55 | // Convert the complex points to polynomial function |
alexpirciu | 1:ceee5a608e7c | 56 | math::PolynomialFunction<std::complex<float>,BEZIER_ORDER> CP2PF(); |
alexpirciu | 1:ceee5a608e7c | 57 | |
alexpirciu | 1:ceee5a608e7c | 58 | // PRIVATE PARAMETERS |
alexpirciu | 1:ceee5a608e7c | 59 | std::complex<T> points[BEZIER_ORDER+1]; |
alexpirciu | 1:ceee5a608e7c | 60 | math::PolynomialFunction<std::complex<T>,BEZIER_ORDER> bezierCurve; |
alexpirciu | 1:ceee5a608e7c | 61 | math::PolynomialFunction<std::complex<T>,BEZIER_ORDER-1> FOder_bezierCurve; |
alexpirciu | 1:ceee5a608e7c | 62 | math::PolynomialFunction<std::complex<T>,BEZIER_ORDER-2> SOder_bezierCurve; |
alexpirciu | 1:ceee5a608e7c | 63 | }; |
alexpirciu | 1:ceee5a608e7c | 64 | };//namespace math |
alexpirciu | 1:ceee5a608e7c | 65 | #include "beziercurve.inl" |
alexpirciu | 1:ceee5a608e7c | 66 | |
alexpirciu | 1:ceee5a608e7c | 67 | #endif // BEZIERCURVE_HPP |
alexpirciu | 1:ceee5a608e7c | 68 |