Pikachu, attaque séries de Fourier !
Arrêtez tout, voici... l'équation de Pikachu !
Quand on le trace pour t entre 0 et 51 π, on obtient...
Pika pikaa !!
Depuis janvier dernier, cette équation est disponible sur WolframAlpha avec la requête "Pikachu curve". Elle est l'oeuvre de Richard Clarke, qui a créé entre autres la courbe des Rolling Stones ou la courbe de Dark Vador. Ces trois courbes sont construites sur le même modèle, un astucieux mélange de courbes paramétriques et de polynômes trigonométriques.
Bon, concrètement, comment peut-on obtenir Pikachu à partir de ce ramassis de sinus ?
Equation paramétrique par morceaux
Déjà, il faut remarquer que l'équation est paramétrique : pour chaque valeur de t (entre 0 et 51 π) correspond un point (x(t);y(t)).
Quand on la regarde de plus près, les équations x(t) et y(t) suivent le même schéma : 13 morceaux composés d'une somme de fonctions de la forme a.sin(m.t+b) multipliée par des fonctions de la forme θ(n.pi-t) θ(t-(n-4).π), le tout multiplié par cette étrange fonction qu'est "theta(sqrt(sgn(sin(t/2))))". Autrement dit, les équations ressemblent à ceci :
(C'est pas forcément plus clair...)
On y retrouve la fonction θ, qui n'est autre que la fonction de Heaviside ; θ(t) vaut 1 si t>0, 0 sinon. Les morceaux θ((4k+3)π-t)θ(t-(4k-1)π) valent donc 1 sur les intervalles [(4k-1)π;(4k+3)π], et 0 sinon.
Ces fonctions θ permettent donc de construire la courbe morceaux par morceaux. En l’occurrence, chacune des 13 parties de l'équation correspond à un morceau du corps de notre souris électrique : corps, oeil gauche, pupille droite, double-menton...
Prenons par exemple le morceau qui correspond au corps de Pikachu :
A cause de la présence de θ(3π-t)θ(t+π), le couple (x(t),y(t)) vaut (0,0) partout, sauf sur l'intervalle [-π;3π]. Graphiquement, cela donne:
De même, l'oeil gauche sera tracé pour t ∈ [3π,7π], l'oeil droit pour t ∈ [7π,11π], et ainsi de suite.
La multiplication finale par θ(√(sgn(sin(t/2)))) en rajoute une couche : (x(t),y(t)) vaut (0,0) partout, sauf sur les intervalles de la forme [2(2k)π;2(2k+1)π] (La racine carrée me semble de trop dans cette équation, mais bon...). Cet ajout n'est pas fondamentalement nécessaire, mais empêche la courbe de repasser sur elle-même.
Bref : l'équation de Pikachu est la réunion de 13 courbes paramétriques, chacune définie sur des intervalles de longueur 2 π.
Polynômes trigonométriques
Tout ça ne nous dit pas comment obtenir les courbes en question... La réponse, il faut la chercher du côté des séries de Fourier.
Point théorique très bref : toute fonction périodique peut s'écrire sous la forme d'une somme (infinie ou non) de fonctions cosinus et sinus de différentes fréquences (sous certaines hypothèses de régularité des fonctions qui entrent en jeu, là n'est pas la question). Les théories des séries de Fourier et de ses transformées sont un domaine actif de la recherche mathématique ; elles ont en particulier donné naissance à la compression JPEG des images ou à la compression MP3 des musiques.
A titre d'exemple, on peut écrire la fonction périodique cos(t)3 sous la forme d'une somme de (co)sinus : cos(t)3=0.75 cos(t)+0.25 cos(3t). Mais les fonctions qui nous intéressent ici, ce sont celles qui nous donnent l'abcisse et l'ordonnée des points de la courbe en fonction du temps t.
Pour obtenir ces fonctions, la méthode la plus simple est d'échantilloner sa courbe. Le mieux, c'est de faire ça sur un exemple :
A gauche : Courbe avant échantillonage (dessinée à la souris - ça se voit)
Au milieu : courbe après échantillonage - 226 points
A droite : Courbes x(t) (rouge) et y(t) (bleu)
La théorie des séries de Fourier nous indique que l'on peut décomposer/approximer cette fonction en somme de fonctions trigonométriques, moyennant des calculs d'intégrales (ou de sommes, dans le cas discret).
La précision du résultat est directement liée à l'ordre N (le nombre de cosinus/sinus) de cette décomposition :
Ordre N=4 : ça ressemble vaguement à un J...
x(t) = -0.15 + 1.02 cos(t) - 0.69 sin(t) + 0.04 cos(2t) - 0.71 sin(2t) + 0.68 cos(3t) - 0.06 sin(3t) + 0.15 cos(4t) - 0.07 sin(4t)
y(t) = 0.26 + 1.59 cos(t) + 0.89 sin(t) + 0.22 cos(2t) - 0.09 sin(2t) -0.39 cos(3t) - 0.03 sin(3t) + 0.2 cos(4t) + 0.09 sin(4t)
Ordre N = 10 : Ca ressemble vraiment à un J !
Une petite transformation des couples cosinus/sinus permettent de n'avoir plus que des fonctions de la forme a.sin(b+nt) (ça prend moins de place et ça a plus de gueule !). La touche finale, c'est l'écriture fractionnaire des coefficients, qui plaira aux Pokéfans les plus pythagoriciens.
Bref : l'équation de Pikachu a été obtenue grâce à l'approximation de Fourier de courbes (bien) dessinées à la main ! Et si vous voulez refaire ça à la maison, vous n'avez pas le choix, il faut vous taper l'étude des séries de Fourier !
Du coup, on peut s'amuser à réduire l'ordre des approximations :
Le fichier GeoGebra pour ceux qui sont intéressés : Pikachu25.ggb
Les 51 courbes Pokémon disponibles sur Wolfram alpha