[*] up [*]
suivant: Conclusion monter: TipeSup précédent: Ombrage

Et pourtant, il tourne !!

Pour animer le cube, il suffit de changer l'orientation du point orienté définissant le cube et sa position, cela est obtenu par l'utilisation d'une boucle qui modifie « sur place » la valeur des angles. Il faut cependant s'occuper d'effacer le cube précédent lors du mouvement. On utilise alors une fonction clip_rect qui calcule le plus petit rectangle contenant tous les points (cf. PROGRAMME 11).


PROGRAMME 11: Animation du cube
\begin{table}
\vspace{-2mm}
\begin{verbatim}let clip_rect (t_pts,_)=
let trans...
..._pressed()) do
demo !a;
a:=!a+1
done;;\end{verbatim} \vspace{-7mm}
\end{table}

Quand l'animation du cube fut terminée, on s'est aperçu que la fonction cree_cube passait beaucoup de temps à calculer des cosinus et des sinus. Pour y remédier, Il suffisait de les tabuler, c'est-à-dire de les précalculer et de placer les résultats dans un tableau. Nous n'aurions alors plus qu'à aller lire les valeurs nécessaires et tous les calculs des sinus et cosinus se transformeraient alors en simple lecture dans un tableau.

Pour le précalcul, une solution est d'utiliser les formules de TCHEBYTCHEV. Celles-ci permettent grâce à une formule de récurrence de calculer tous les sinus et cosinus des multiples d'un angle $\alpha$ donné. Il suffit d'initialiser la récurrence avec les deux valeurs du cosinus et du sinus pour les valeurs 0 et $\alpha$. Ces formules étant assez aisées à établir, nous allons en présenter ici la démonstration. Celle-ci est basée principalement sur la formule de MOIVRE :

\begin{displaymath}(e^{i\alpha})^n = e^{i\,n\alpha} = \cos n\alpha + i\sin n\alpha\end{displaymath}

On exprime alors $e^{i\,(n-1)\alpha}$ et $e^{i\,(n+1)\alpha}$ :

\begin{eqnarray*}
e^{i\,(n-1)\alpha} &=& \cos (n-1)\alpha + i\sin (n-1)\alpha\\
e^{i\,(n+1)\alpha} &=& \cos (n+1)\alpha + i\sin (n+1)\alpha
\end{eqnarray*}



En faisant la somme des ces deux expressions, on obtient alors :

\begin{displaymath}
e^{i\,(n-1)\alpha} + e^{i\,(n+1)\alpha} = \cos (n-1)\alpha + \cos (n+1)\alpha + i(\sin (n-1)\alpha + \sin (n+1)\alpha)
\end{displaymath}

Soit, en factorisant dans le premier membre par $e^{i\,n\alpha}$ :

\begin{displaymath}
e^{i\,n\alpha}(2\cos \alpha) = \cos (n-1)\alpha + \cos (n+1)\alpha + i(\sin (n-1)\alpha + \sin (n+1)\alpha)
\end{displaymath}

En prenant partie réelle et partie imaginaire, on obtient :

\begin{eqnarray*}
\cos n\alpha * 2\cos \alpha &=& \cos (n-1)\alpha + \cos (n+1)\...
...n n\alpha * 2\cos \alpha &=& \sin (n-1)\alpha + \sin (n+1)\alpha
\end{eqnarray*}



On note alors $(c_n)_{n\in\mathbb{N}}$ la suite des cosinus des multiples entiers de $\alpha$ et $(s_n)_{n\in\mathbb{N}}$ la suite des sinus des multiples entiers de $\alpha$. On obtient alors les relations de récurrence linéaires d'ordre $2$ suivantes :

\begin{eqnarray*}
c_{n+1} &=& 2\cos \alpha * c_n - c_{n-1}\\
s_{n+1} &=& 2\cos \alpha * s_n - s_{n-1}
\end{eqnarray*}




PROGRAMME 12: Précalcul des valeurs des sinus et cosinus
\begin{table}
\vspace{-2mm}
\begin{verbatim}let calcul_trigo portion_2Pi =
le...
...28;;
let trigo_alpha = calcul_trigo 64;;\end{verbatim} \vspace{-7mm}
\end{table}

L'avantage de ces formules est double : d'une part, elles sont stables, c'est-à-dire que les erreurs de calcul successives induites par le calcul réel ne s'amplifient pas. D'autre part, tous nos angles ne varient que d'une fraction de $2\pi$ à chaque itération. Nous n'avons donc besoin que des valeurs des sinus et cosinus pour ces fractions de $2\pi$. De plus, en prenant des fractions de $2\pi$, par exemple $2\pi/n$, (ici $n=32$, $n=128$ et $n=64$), il suffit de calculer les $n$ premières valeurs et de reboucler au début du tableau quand la valeur de l'angle dépasse $2\pi$. Dans la boucle d'animation, à la fin du programme, on calcule donc les angles modulo $n$. Le précalcul des cosinus et des sinus a été implémenté comme décrit au PROGRAMME 12portion_2Pi est un entier qui définit la fraction de $2\pi$ dont on va calculer les sinus et les cosinus.

Les tableaux ainsi créés contiendront, à l'indice $k$, le couple de valeurs de $\cos k\frac{2\pi}{n}$ et $\sin k\frac{2\pi}{n}$. On appelle alors trois fois la fonction calcul_trigo avant l'exécution.


[*] up [*]
suivant: Conclusion monter: TipeSup précédent: Ombrage

1999-01-29