From 082e5348971e4f974538fda07b803f67e273d585 Mon Sep 17 00:00:00 2001 From: Thomas FORGIONE Date: Thu, 12 Mar 2015 21:43:03 +0100 Subject: [PATCH] Splines.tex --- report/subsections/splines.tex | 38 +++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/report/subsections/splines.tex b/report/subsections/splines.tex index e965047..91750d3 100644 --- a/report/subsections/splines.tex +++ b/report/subsections/splines.tex @@ -1 +1,37 @@ -Hello +The splines are a necessary element for everything that will follow. This is +why we tried to make it as generic as possible. For this, we used a C++11 +feature called \emph{variadic templates}. A spline is composed of control +points (represented as C++ tuples), a nodes vector and degree. The class we +made looks like this + +\begin{lstlisting}[language=c++] +template +class Spline +{ + public: + std::tuple operator()(float t); + std::tuple prime(float t); + + private: + std::vector> controlPoints; + std::vector nodes; + int degree; +}; +\end{lstlisting} + +We redefined the \texttt{operator()} to be able to \emph{evaluate} a spline at +a certain time, and the result will be an object which is a barycenter of those +control points. We also made a member function \texttt{prime} to be able to +compute the derivative of a spline. + +The \texttt{operator()} computes the barycent of the control points like this +$$C(t) = \sum_{i=0}^m P_i N_i^n(t)$$ +where $(P_i)_{i\in [[0,m]]}$ are the $m+1$ control points, $n$ is the degree of +the spline and +$$N_i^0(t) = \left\{\begin{matrix}1&\text{if } t \in [t_i, t_{i+1}] \\ 0 & \text{otherwise} \end{matrix} \right.$$ +$$ N_i^k(t) = \frac{t-t_i}{t_{i+k}-t_{i}} N_i^{k-1}(t) + \frac{t_{i+k+1} - t}{t_{i+k+1}-t_{i+1}} N_{i+1}^{k-1}(t) \quad\text{assuming} \quad \frac{0}{0} = 0$$ + +The \texttt{prime} member function computes the derivative like this +$$C'(t) = \sum_{i=0}^m N_i^{\prime n} (t) P_i $$ +with +$$ N_i^{\prime n}(t) = \frac{n}{t_{i+n}-t_{i}}N_i^{n-1}(t) - \frac{n}{t_{i+n+1}-t_{i+1}}N_{i+1}^{n-1}(t)$$