Dessinons avec des (épi)ⁿ-cycloïdes
Depuis quelques jours circule une très chouette animation montrant des épicycloïdes dessiner la jeune fille à la perle de Johannes Vermeer. Parce que, oui, les épicycloïdes dessinent très bien, et ça ressemble à ceci :
Generative Art. pic.twitter.com/5dW7uvDqHR
— じゃがりきん (@jagarikin) 10 février 2018
Quand on voit cette animation, on est en droit de ce demander par quelle sorcellerie une telle prouesse est possible ? Pour le savoir, il va falloir fouiller du côté des épicycloïdes et de la théorie de Fourier.
Les (épi)cycloïdes
On appelle épicycloïde la courbe que l'on obtient en suivant la trajectoire d'un point situé situé sur le périmètre d'un cercle roulant sur un autre cercle; L'exemple le plus simple d'épicycloïde est la cardioide, obtenue en regardant un disque rouler sur le périmètre d'un disque de même rayon.
Je voulais sortir cet article pour la saint-Valentin, mais c'est raté
Pour simplifier nos équations, on va considérer un autre type d'épicyloïdes (qui ne mériteraient pas de porter ce nom, mais on va faire avec). Au lieu de faire rouler un cercle sur le périmètre d'un autre, on va plutôt faire rouler le centre du cercle sur le périmètre d'un autre. En prenant, par exemple, un cercle porteur de rayon 4, et un cercle porté de rayon 2, et on faisant tourner ce deuxième cercle deux fois plus vite que le premier, on obtient... à nouveau une cardioïde :
Une bien jolie cardioïde
On peut bien sûr faire varier les paramètres (taille des cercles et vitesse de rotation), ce qui donne toute une collections d'épicycloïdes :
De bien jolies épicycloïdes
Mais rien ne nous empêche de faire porter au cercle tournoyant un nouveau cercle tournant, ce qui permet d'obtenir des épi-épi-cycloïdes. Avec trois cercles, il y a donc de nombreux paramètres à prendre en compte, ce qui nous donne toute une galerie de courbes possibles. En prenant, par exemple, des cercles de rayon 5, 2.5 et 1.5, et des vitesses de rotations de respectivement 1, 2 et 3, on obtient la courbe suivante :
Une bien jolie épi-épicycloïde
Une excellente question à se poser, c'est celle de l'équation des courbes que l'on obtient. Pour comprendre l'idée, reprenons la situation précédente. On a donc les rayons de rayons respectifs 5, 2.5 et 1.5, et ces rayons forment des angles mesurant respectivement α, 2α et 3α par rapport à l'horizontale (on suppose ici que les phases sont toutes de 0, c'est à dire que avant de se mettre à tourner, les rayons colorés sont tous alignés). On peut alors déterminer les coordonnées du point traceur M en fonction de α :
Les coordonnées du point M peuvent s'exprimer à l'aide de l'angle α entre l'horizontale et le rayon du cerlce porteur
- on peut alors voir, sur le schéma, que l'abscisse de M est donné par xM(α) = 5 cos(α) + 2.5 cos(2α) + 1.5 cos(3α)
- de la même manière, son ordonnée est donné par yM(α)=5 sin(α) + 2.5 sin(2α) + 1.5 sin(3α)
De manière générale, si on a N cercles, de rayons r1, r2, ... rN, et qu'ils tournent à des vitesse de respectivement k1, k2, ..., kN, on obtient pour le point M les coordonnées :
- xN(α) = r1 cos(k1 α) + r2 cos(k2 α) + ... rN cos(kN α)
- yN(α) =r1 sin(k1 α) + r2sin(k2 α) + ... rN sin(kN α)
Tout ça, c'est lorsque les cercles ont toutes la même phase, de 0. Ce que je vais appeler la phase, c'est la direction de référence sur les cercles par rapport à laquelle on calcule l'angle α. En choisissant une autre phase β pour par exemple le premier des trois cercles, on obtient une épicycloïde radicalement différente :
De manière générale, si on a N cercles, de rayons r1, r2, ...,rN, de phase β1, β2, ..., βN, et qu'ils tournent à des vitesse de respectivement k1, k2, ..., kN,, on obtient pour le point M les coordonnées :
- xN(α) = r1 cos(k1 α+β1) + r2 cos(k2 α+β2) + ... rN cos(kN α+βN)
- yN(α) =r1 sin(k1 α+β1) + r2 sin(k2 α+β2) + ... rN sin(kN α+βN)
Mettons ces équations dans un coin de notre tête, et parlons à présent de tout autre chose chose
Décomposition d'une courbe paramétrique à l'aide de ses coefficients de Fourier
Avertissement : je n'y comprends pas grand chose en théorie de Fourier, j'espère ne pas dire de contre-vérités dans les paragraphes qui vont suivre. Si c'est le cas, dites-le moi très vite.
Prenons un joli dessin. Disons, la silhouette de la France dessinnée à main levée sur Geogebra, mais vous pouvez prendre ce que vous voulez du moment qu'il s'agit d'une courbe refermée sur elle-même.
La France métropolitaine continentale (vue d'artiste)
Comment trouver une équation paramétrique de cette courbe qui soit suffisamment proche de la courbe originale ? Il nous faut, en fonction de α ∈ [0;2π], les coordonnées (x(α);y(α)) des points de la courbe. Une méthode pas trop compliquée à mettre en place est de déterminer la décomposition sous la forme d'un polynôme trigonométrique des fonctions x et y, c'est à dire écrire x et y sous la forme :
xN(α) = a0 + a1 cos(α) + b1 sin(α) + a2 cos(2 α) + b2 sin(2 α) +... + aN cos(N α) + bN sin(N α)
yN(α) = a'0 + a'1 cos(α) + b'1 sin(α) + a'2 cos(2 α) + b'2 sin(2 α) +... + a'N cos(N α) + b'N sin(N α)
Comment s'y prendre pour déterminer tous ces coefficients ? Le plus simple, c'est d'échantillonner le dessin que j'ai fait au-dessus. En l'occurence, celui-ci est constitué de M=578 points, que l'on va soigneusement numéroter de 1 à 578 :
Comptez bien, il y a 578 points
J'ai donc maintenant deux suites (xj) et (yj), et ce sont celles-ci qu'il faut approcher par les bonnes fonctions α↦x(α) et α↦y(α) :
Les 578 abscisses en bleus, et les 578 ordonnées en rouge
En l'occurence, il se trouve que l'on peut calculer les coefficients a0, a1, .. aN et b1, b2, ..., bN de la fonction
α↦xN(α) = a0 + a1 cos(α) + b1 sin(α) + a2 cos(2 α) + b2 sin(2 α) +... + aN cos(N α) + bN sin(N α)
à l'aide d'une transformée de Fourier discrète, ce qui ressemble, sauf erreur de ma part, à :
- a0 = 1/M Σj xj
- ak = 2/M Σj xj cos(k 2π/M j)
- bk = 2/M Σj xj sin(k 2π/M j)
et de même pour les coefficients a'0, a'1, .. a'N et b'1, b'2, ..., b'N de pour la fonction yN.
En faisant tous ces calculs avec N=10, on détermine les équations de deux fonctions trigonométriques ayant l'allure recherchée :
Courbes approchant pas trop mal l'échantillonage réalisé au-dessus.
Il n'y a plus qu'à tracer la courbe paramétrée par (xN(α);yN(α)), et paf, on obtient les grandes lignes de notre carte de France !
La France d'ordre N=10
Bien sûr, puisque l'on a pris des des fonctions trigonométriques de périodes d'au plus N=10, la courbe obtenue est relativement sommaire. On pourrait avoir un peu plus de détails en prenant une meilleure valeur de N, par exemple avec N=20 :
La France d'ordre N=20, bien plus pécise
Le lien entre tout ça
On a donc, d'un côté, des épicycloides, d'équations paramétriques :
- x(α) = r1 cos(k1 α+β1) + r2 cos(k2 α+β2) + ... rN cos(kN α+β)
- y(α) =r1 sin(k1 α+β1) + r2 sin(k2 α+β2) + ... rN sin(kN α+β)
- α∈[0;2π]
De l'autre, on a des courbes fermées d'équations paramétriques,
- x(α) = a0 + a1 cos(α) + b1 sin(α) + a2 cos(2 α) + b2 sin(2 α) +... + aN cos(N α) + bN sin(N α)
- y(α) = a'0 + a'1 cos(α) + b'1 sin(α) + a'2 cos(2 α) + b'2 sin(2 α) +... + a'N cos(N α) + b'N sin(N α)
- α∈[0;2π]
On peut en fait transformer l'écriture de ces derniers polynômes, en remarquant que
a cos(kα) + b sin(α) = r cos(kα + β) avec r et β tels que a - ib = r e i β
Bref, l'équation paramétrique du joli dessin que l'on cherche à recréer s'écrit sous la forme
- x(α) = a0 + r1 cos(α+β1) + r2 cos(2α+β2) + ... rN cos(Nα+βN)
- y(α) =a'0 + r'1 cos(α+β'1) + r'2 cos(2α+β'2) + ... r'N cos(Nα+β'N)
- α∈[0;2π]
Il nous faut donc construire deux épicycloides :
- la première, au-dessus de notre dessin, constitués de N cercles de rayons r1, r2, ..., rN, de phase β1, β2, ...,βN et de périodes 1, 2, ..., N, dont l'abscisse du point externe sera l'abscisse des points du dessin
- la deuxième, à gauche, constitués de N cercles de rayons r'1, r'2, ..., r'N, de phase β'1, β'2, ...,β'N et de périodes 1, 2, ..., N, dont l'abscisse du point externe sera l'ordonnée des points du dessin (pour ce faire, une petite symétrie est nécéssaire).
Et... voilà !