Tores de Hopf - Page 2 — Les-mathematiques.net The most powerful custom community solution in the world

Tores de Hopf

2»

Réponses

  • Le même version Haskell : Giphy. Lequel preférez-vous ?
  • 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-)73864
  • Voilà ce que j'obtiens maintenant (eh oui, je n'ai pas abandonné). Ce n'est toujours pas ça, n'est-ce pas ? Joli quand même.75456
  • Ca ressemble fort quand même, mais dans l'original (ci-dessous) les lobes ont une forme de "boule", les miens sont plus plats.75458
  • 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:75466
  • Voilà, si je prends cette fonction périodique (avant je prenais $cos 3x$), les lobes sont efffectivement plus ronds.75472
    75474
  • Je vous ai fait un film pour que vous voyiez en live comment le tore se forme : Hopf torus movie.

    À 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.
  • 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);
    
    79336
    79338
  • Joli celui-ci. C'est quand $p$ est une courbe style "balle de tennis".79672
  • 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.)99844
  • Bonjour,

    C'est beau, mais tu pourrais nous faire la même chose en Python ?

    Cordialement,

    Rescassol
  • 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).
    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    
    A = 0.44
    n = 3
    def Gamma(t):
    	alpha = np.pi/2 - (np.pi/2-A)*np.cos(n*t)
    	beta = t + A*np.sin(2*n*t)
    	return np.array([
          np.sin(alpha) * np.cos(beta),
          np.sin(alpha) * np.sin(beta),
          np.cos(alpha)
    	])
    
    def HopfInverse(p, phi):
    	return np.array([
          (1+p[2])*np.cos(phi),
          p[0]*np.sin(phi) - p[1]*np.cos(phi), 
          p[0]*np.cos(phi) + p[1]*np.sin(phi),
          (1+p[2])*np.sin(phi)
    	]) / np.sqrt(2*(1+p[2]))
    
    def Stereo(q):
    	return 2*q[0:3] / (1-q[3])
    
    def F(t, phi):
    	return Stereo(HopfInverse(Gamma(t), phi))
    
    angle = np.linspace(0, 2 * np.pi, 300)
    theta, phi = np.meshgrid(angle, angle)
    X, Y, Z = F(theta, phi)
    
    # Display the mesh
    fig = plt.figure()
    ax = fig.gca(projection = '3d')
    #ax.set_xlim3d(-1, 1)
    #ax.set_ylim3d(-1, 1)
    #ax.set_zlim3d(-1, 1)
    ax.plot_surface(Z, X, Y, rstride = 1, cstride = 1, cmap="hot")
    plt.show()
    
    127178
  • Le tore est centré en (0,0,0). Y a-t-il une option pour avoir une couleur fonction de la distance à (0,0,0) ?
  • Ah oui j'ai trouvé une technique ici.

    En interactif il y a la librairie chart-studio (c'est plotly) mais il faut se créer un compte.127182
  • Ah non, avec plotly c'est bon. Le graphique est interactif.
    import plotly.graph_objects as go
    import plotly.io as pio
    import numpy as np
    
    ......
    
    x, y, z = F(theta, phi)
    
    # Display the mesh
    surface = go.Surface(x=x, y=y, z=z)
    data = [surface]
    
    layout = go.Layout(
        title="Hopf Torus",
        scene=dict(
            xaxis=dict(
                gridcolor="rgb(255, 255, 255)",
                zerolinecolor="rgb(255, 255, 255)",
                showbackground=False,
                backgroundcolor="rgb(230, 230,230)",
            ),
            yaxis=dict(
                gridcolor="rgb(255, 255, 255)",
                zerolinecolor="rgb(255, 255, 255)",
                showbackground=False,
                backgroundcolor="rgb(230, 230,230)",
            ),
            zaxis=dict(
                gridcolor="rgb(255, 255, 255)",
                zerolinecolor="rgb(255, 255, 255)",
                showbackground=False,
                backgroundcolor="rgb(230, 230,230)",
            ),
        ),
    )
    
    fig = go.Figure(data=data, layout=layout)
    pio.write_html(fig, file='HopfTorus.html', auto_open=True)
    
    127184
  • 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
  • Beaucoup mieux avec PyVista.
    grid = pv.StructuredGrid(x, y, z)
    grid.plot(smooth_shading=True)
    

    Interactif aussi. Par contre comment adoucir le raccordement que l'on voit ?127322
  • Pyvista + Flask.

    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.127578
  • Tore de Hopf électrique. PyVista est une bombe atomique.127714
  • 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) :



  • Le problème avec ce tore-ci, c'est que ses lobes sont énormes, et elles bouffent trop l'image. Je vais essayer un autre...
  • Voilà un tore de Hopf avec des lobes plus petites  B)


  • Un lobe, le mot est masculin.


  • Joli... l'image est un codage couleurs de la fonction sigma de Weierstrass.
  • Bonjour Saturne,
    Heureux que tu ais enfin pu te connecter : en effet, c'est devenu assez aléatoire ...
    Tes créations sont toujours aussi belles ! Merci de nous les faire partager !
    Bien cordialement, JLB
  • Merci ! J'ai encore le nez dedans ^^ Reste à animer ça !



  • Hmm.. j'ai oublié de fixer la bounding box :-( 


  • Hmm.. j'ai oublié de fixer la bounding box :-( 


  • Voilà, mais je préfère celui de 15H13.


  • Déformation d'un tore normal en tore de Hopf. 

    Bon en fait le tore normal est un tore de Hopf...




Connectez-vous ou Inscrivez-vous pour répondre.
Success message!