La librairie OpenGL d'Haskell est beaucoup plus puissante que celle de R et je peux me permettre un million de facettes à la place de dix-mille. Admirez la lissitude du truc B-)
En fait, c'est bien possible que mon truc soit juste. Mais la forme finale dépend du choix de la fonction périodique. Ici le résultat avec une fonction qui fait des pics:
J'ai enfin compris comment paramétriser les tores de Hopf (les vrais tores de Hopf, alors que les trucs ci-dessus étaient des tores de Bianchi-Pinkall).
Il faut, en principe, passer par les quaternions. On identifie $S^3$ avec les quaternions unitaires et on identifie $S^2$ avec les quaternions unitaires qui ont une "partie $j$" nulle.
On part d'une courbe $p \colon [a,b] \to S^2$, et il faut prendre un "lift" ("relévement" en français ?) de cette courbe, c'est-à-dire une application $y\colon [a,b] \to S^3$ telle que $p = \pi \circ y$, où $\pi$ est l'application de Hopf (qui se définit sympathiquement avec les quaternions).
Le cylindre de Hopf associé à $p$ est alors $(t,\phi) \mapsto e^{i\phi}y(t)$. On dit que c'est un tore de Hopf lorsque $p$ est une courbe fermée. Voilà la paramétrisation.
Au début je l'ai programmé dans R avec les quaternions (j'ai un peu galéré pour trouver $y$ qui finalement est très simple), mais après un peu de ménage j'ai pu me débarasser des quaternions.
Voici, ci-dessous, après projection stéréographique, un rendu avec Asymptote et une animation faite avec R. Et voici une animation interactive en Javascript pour s'amuser : tore de Hopf.
Le code Asymptote :
settings.render = 4;
settings.outformat="pdf";
size(500,0);
import graph3;
import palette;
real k = 1;
real n = 3; // number of lobes
triple F(pair uv){
real t = uv.x;
real phi = uv.y;
real den = sqrt(1+k^2*cos(n*t)^2);
real p2 = cos(t)/den;
real p3 = sin(t)/den;
real p1 = k*cos(n*t)/den;
real yden = sqrt(2*(1+p1));
real y1 = (1+p1)/yden;
real y2 = p2/yden;
real y3 = p3/yden;
real cosphi = cos(phi);
real sinphi = sin(phi);
real x1 = cosphi*y1;
real x2 = sinphi*y1;
real x3 = cosphi*y2 - sinphi*y3;
real x4 = cosphi*y3 + sinphi*y2;
return (x1/(1-x4), x2/(1-x4), x3/(1-x4));
}
splinetype[] Notaknot={notaknot,notaknot,notaknot};
surface s=surface(F,(0,0),(2pi,2*pi),116,116,Notaknot,Notaknot);
s.colors(palette(s.map(abs),Gradient(8192,yellow,green)));
draw(rotate(-20,(0,1,0))*rotate(-45,(0,0,1))*rotate(90,(1,0,0))*s);
En fait, je ne sais pas ce que je faisais, et il y a une voie plus claire que celle avec le "lift", qui revient au même.
La "préimage" de Hopf d'un point $p=(p_x,p_y,p_z)$ sur la sphère unité $S^2$ est un cercle sur $S^3$ dont un paramétrage est :
$$
\begin{array}{ccc}
\mathcal{C}_p \colon & [0,2\pi[ & \longrightarrow & S^3 \\
& \phi & \longmapsto & \mathcal{C}_p(\phi)
\end{array}
$$
avec
$$
\mathcal{C}_p(\phi) =
\frac{1}{\sqrt{2(1+p_z)}}
\begin{pmatrix}
(1+p_z) \cos(\phi) \\
p_x \sin(\phi) - p_y \cos(\phi) \\
p_x \cos(\phi) + p_y \sin(\phi) \\
(1+p_z) \sin(\phi)
\end{pmatrix}.
$$
Maintenant, soit une courbe sur $S^2$ (autrement dit, une courbe sphérique), décrite par une fonction $\Gamma$ allant d'un intervalle $I \subset \mathbb{R}$ dans la sphère unité $S^2$. Alors le cylindre de Hopf correspondant à $\Gamma$ a pour paramétrage
$$
\begin{array}{ccc}
H_\Gamma \colon & I \times [0,2\pi[ & \longrightarrow & S^3 \\
& (t, \phi) & \longmapsto & \mathcal{C}_{\Gamma(t)}(\phi)
\end{array}.
$$
On dit que c'est un tore de Hopf lorsque la courbe sphérique est fermée. On obtient une surface dans $\mathbb{R}^3$ en appliquant une projection stéréographique. Les plus jolis tores de Hopf que j'ai trouvés sont ceux correspondant à
$$
\Gamma(t) =
\begin{pmatrix}
\sin\bigl(\pi/2 - (\pi/2 - A) \cos(nt)\bigr)
\cos\bigl(t + A \sin(2nt)\bigr) \\
\sin\bigl(\pi/2 - (\pi/2 - A) \cos(nt)\bigr)
\sin\bigl(t + A \sin(2nt)\bigr) \\
\cos\bigl(\pi/2 - (\pi/2 - A) \cos(nt)\bigr)
\end{pmatrix}, \quad t \in [0,2\pi[
$$
où $A$ est une constante réelle qui donne un joli résultat lorsque $A = 0.44$ et $n \geqslant 2$ est un entier qui correspond au nombre de "lobes" de la courbe décrite par $\Gamma$ (style de courbe qu'on voit sur une balle de baseball) et aussi au nombre de "lobes" du tore de Hopf correspondant. C'est cette courbe sphérique que j'ai utilisée dans le post précédent, avec $n = 4$. J'ai pris $n = 3$ pour obtenir la figure ci-dessous.
Et voici une application JavaScript qui vous permet de jouer avec $n$ et $A$ : tore de Hopf JS.
Voilà, vous savez tout. À vos claviers, j'attends de voir vos tores de Hopf B-)
(En fait je pense que j'avais essayé cette démarche mais je n'avais pas les composantes de $\mathcal{C}_p(\phi)$ dans le bon ordre.)
Non, je ne connais rien à Python. Mais tout utilisateur de Python devrait savoir dessiner une surface paramétrée, non ? Tiens je vais essayer, je cherchais justement des motivations pour me mettre à Python.
Je dois faire du Python pour le boulot. Je m'y suis donc mis. Y a-t-il une librairie qui permet de faire ce genre de surface paramétrée interactive ? (qu'on peut tourner avec la souris).
Bonsoir Saturne
Sur l'aspect mathématique ou programmation, je serais bien incapable d'émettre la moindre opinion, mais esthétiquement parlant, c'est vraiment su-per-be !
J'aime particulièrement l'objet du 15/03/18 à 21H30, avec ses couleurs irisées ! http://www.les-mathematiques.net/phorum/read.php?8,1626068,1627202#msg-1627202
Merci pour le spectacle !
JLB
Hey ! J'ai galéré pour me connecter (internal server error 500). Bref...
Je viens de comprendre un truc. En fait, la paramétrisation avec le lift est mieux, car elle est conforme, et du coup avec celle-ci on peut "mapper" une image sur le tore, par exemple un échiquier (avec 5x5 cases ici) :
Réponses
À chaque étape, un nouveau cercle forme le tore. C'est une fibre de la fibration de Hopf.
On peut faire ça en partant de n'importe quelle courbe fermée sur la sphère, et on obtient ainsi différentes surfaces de ce style.
Il faut, en principe, passer par les quaternions. On identifie $S^3$ avec les quaternions unitaires et on identifie $S^2$ avec les quaternions unitaires qui ont une "partie $j$" nulle.
On part d'une courbe $p \colon [a,b] \to S^2$, et il faut prendre un "lift" ("relévement" en français ?) de cette courbe, c'est-à-dire une application $y\colon [a,b] \to S^3$ telle que $p = \pi \circ y$, où $\pi$ est l'application de Hopf (qui se définit sympathiquement avec les quaternions).
Le cylindre de Hopf associé à $p$ est alors $(t,\phi) \mapsto e^{i\phi}y(t)$. On dit que c'est un tore de Hopf lorsque $p$ est une courbe fermée. Voilà la paramétrisation.
Au début je l'ai programmé dans R avec les quaternions (j'ai un peu galéré pour trouver $y$ qui finalement est très simple), mais après un peu de ménage j'ai pu me débarasser des quaternions.
Voici, ci-dessous, après projection stéréographique, un rendu avec Asymptote et une animation faite avec R. Et voici une animation interactive en Javascript pour s'amuser : tore de Hopf.
Le code Asymptote :
La "préimage" de Hopf d'un point $p=(p_x,p_y,p_z)$ sur la sphère unité $S^2$ est un cercle sur $S^3$ dont un paramétrage est :
$$
\begin{array}{ccc}
\mathcal{C}_p \colon & [0,2\pi[ & \longrightarrow & S^3 \\
& \phi & \longmapsto & \mathcal{C}_p(\phi)
\end{array}
$$
avec
$$
\mathcal{C}_p(\phi) =
\frac{1}{\sqrt{2(1+p_z)}}
\begin{pmatrix}
(1+p_z) \cos(\phi) \\
p_x \sin(\phi) - p_y \cos(\phi) \\
p_x \cos(\phi) + p_y \sin(\phi) \\
(1+p_z) \sin(\phi)
\end{pmatrix}.
$$
Maintenant, soit une courbe sur $S^2$ (autrement dit, une courbe sphérique), décrite par une fonction $\Gamma$ allant d'un intervalle $I \subset \mathbb{R}$ dans la sphère unité $S^2$. Alors le cylindre de Hopf correspondant à $\Gamma$ a pour paramétrage
$$
\begin{array}{ccc}
H_\Gamma \colon & I \times [0,2\pi[ & \longrightarrow & S^3 \\
& (t, \phi) & \longmapsto & \mathcal{C}_{\Gamma(t)}(\phi)
\end{array}.
$$
On dit que c'est un tore de Hopf lorsque la courbe sphérique est fermée. On obtient une surface dans $\mathbb{R}^3$ en appliquant une projection stéréographique. Les plus jolis tores de Hopf que j'ai trouvés sont ceux correspondant à
$$
\Gamma(t) =
\begin{pmatrix}
\sin\bigl(\pi/2 - (\pi/2 - A) \cos(nt)\bigr)
\cos\bigl(t + A \sin(2nt)\bigr) \\
\sin\bigl(\pi/2 - (\pi/2 - A) \cos(nt)\bigr)
\sin\bigl(t + A \sin(2nt)\bigr) \\
\cos\bigl(\pi/2 - (\pi/2 - A) \cos(nt)\bigr)
\end{pmatrix}, \quad t \in [0,2\pi[
$$
où $A$ est une constante réelle qui donne un joli résultat lorsque $A = 0.44$ et $n \geqslant 2$ est un entier qui correspond au nombre de "lobes" de la courbe décrite par $\Gamma$ (style de courbe qu'on voit sur une balle de baseball) et aussi au nombre de "lobes" du tore de Hopf correspondant. C'est cette courbe sphérique que j'ai utilisée dans le post précédent, avec $n = 4$. J'ai pris $n = 3$ pour obtenir la figure ci-dessous.
Et voici une application JavaScript qui vous permet de jouer avec $n$ et $A$ : tore de Hopf JS.
Voilà, vous savez tout. À vos claviers, j'attends de voir vos tores de Hopf B-)
(En fait je pense que j'avais essayé cette démarche mais je n'avais pas les composantes de $\mathcal{C}_p(\phi)$ dans le bon ordre.)
C'est beau, mais tu pourrais nous faire la même chose en Python ?
Cordialement,
Rescassol
En interactif il y a la librairie chart-studio (c'est plotly) mais il faut se créer un compte.
Sur l'aspect mathématique ou programmation, je serais bien incapable d'émettre la moindre opinion, mais esthétiquement parlant, c'est vraiment su-per-be !
J'aime particulièrement l'objet du 15/03/18 à 21H30, avec ses couleurs irisées ! http://www.les-mathematiques.net/phorum/read.php?8,1626068,1627202#msg-1627202
Merci pour le spectacle !
JLB
Interactif aussi. Par contre comment adoucir le raccordement que l'on voit ?
La qualité du graphique est mieux que ça en vrai. L'enregistrement en GIF l'a bousillée.
Si vous cliquez sur l'image vous pourrez voir le GIF.
Je viens de comprendre un truc. En fait, la paramétrisation avec le lift est mieux, car elle est conforme, et du coup avec celle-ci on peut "mapper" une image sur le tore, par exemple un échiquier (avec 5x5 cases ici) :
Joli... l'image est un codage couleurs de la fonction sigma de Weierstrass.
Bon en fait le tore normal est un tore de Hopf...