Le package tikz — Les-mathematiques.net The most powerful custom community solution in the world

Le package tikz

Bonjour, s'il vous comment faire ce schéma ?
Merci.105866

Réponses

  • Bonjour,

    Pour avoir la direction normale à l'ellipse en un point choisi, le plus simple consiste, je crois, à utiliser la représentation paramétrique classique. On peut alors obtenir ceci :
    \documentclass[tikz, border=2mm]{standalone}
    \usetikzlibrary{arrows.meta, calc}
    
    \begin{document}
    \begin{tikzpicture}[
      declare function={a=1; b=2;},
      fleche/.style n args={3}{
        insert path={
          let \n1={#1},
          \n2={atan2(a*sin(\n1), b*cos(\n1))} in
          [double, -Implies, double distance=1mm]
          ({a*cos(\n1)}, {b*sin(\n1)}) ++(\n2:#2) -- +(\n2:#3)
        }
      },
      ]
    \draw plot[variable=\t, domain=0:360, smooth] ({a*cos(\t)}, {b*sin(\t)});
    
    \foreach \angle in {0, 60, 90, 180, 270, 300} {
      \draw[fleche={\angle}{0.1}{1}];
    }
    \end{tikzpicture}
    \end{document}
    
    Malheureusement, le tracé de certaines double flèches provoque un léger artefact, gris clair dans notre cas (ce problème a été rapporté ici, ...). On peut s'en débarasser en changeant le bout de la flèche, mais c'est plus moche et plus compliqué :
    \documentclass[tikz, border=2mm]{standalone}
    \usetikzlibrary{arrows.meta, calc}
    
    \begin{document}
    \begin{tikzpicture}[
      declare function={a=1; b=2;},
      fleche/.style n args={3}{
        insert path={
          let \n1={#1},
          \n2={atan2(a*sin(\n1), b*cos(\n1))} in
          [double, -{Stealth[width=2pt 1.3 0]}, double distance=1mm]
          ({a*cos(\n1)}, {b*sin(\n1)}) ++(\n2:#2) -- +(\n2:#3)
        }
      },
      % À cause de <https://tex.stackexchange.com/questions/338972/how-do-you-extend-the-inner-line-of-a-double-line>
      flecherepare/.style n args={3}{
        insert path={
          let \n1={#1},
          \n2={atan2(a*sin(\n1), b*cos(\n1))} in
          [white, line width=1mm, shorten <=-0.1pt, shorten >=7pt]
          ({a*cos(\n1)}, {b*sin(\n1)}) ++(\n2:#2) -- +(\n2:#3)
        }
      },
      ]
    \draw plot[variable=\t, domain=0:360, smooth] ({a*cos(\t)}, {b*sin(\t)});
    
    \newcommand*{\mafleche}[1]{%
      \draw[fleche={#1}{0.1}{1}];
      \draw[flecherepare={#1}{0.1}{1}];
    }
    
    \foreach \angle in {0, 60, 90, 180, 270, 300} {
      \mafleche{\angle}
    }
    \end{tikzpicture}
    \end{document}
    
    105872
    105874
  • Comment faire une rotation a droite de l'ellipse ? s'il vous plait
  • Je ne sais pas ce qu'est une rotation à droite, mais on peut faire cela :
    \documentclass[tikz, border=2mm]{standalone}
    \usetikzlibrary{arrows.meta, calc}
    
    \begin{document}
    \begin{tikzpicture}[
      declare function={a=1; b=2;},
      fleche/.style n args={3}{
        insert path={
          let \n1={#1},
          \n2={atan2(a*sin(\n1), b*cos(\n1))} in
          [double, -Implies, double distance=1mm]
          ({a*cos(\n1)}, {b*sin(\n1)}) ++(\n2:#2) -- +(\n2:#3)
        }
      },
      ]
      \begin{scope}[rotate=-20]
        \draw plot[variable=\t, domain=0:360, smooth] ({a*cos(\t)}, {b*sin(\t)});
    
        \foreach \angle in {0, 60, 90, 180, 270, 300} {
          \draw[fleche={\angle}{0.1}{1}]; }
      \end{scope}
    \end{tikzpicture}
    \end{document}
    
    105880
  • @brian:
    En fait, quand tu cliques sur la photo de kirou, tu peux t'apercevoir qu'elle est tournée de 90° dans le sens direct par rapport à la photo affichée.
  • Merci beaucoup, comment écrire dedans s'il vous plait, je n'ai pas trouvé comment faire
  • J'ai changé les degrés et ca a marché comme je veux, j'aimerais juste écrire a l'intérieur de l'ellipse et aux extrémités des flèches
  • Dans ce cas (cf. ce qu'a dit Philippe Malot), pas besoin de l'option 'rotate' ; il vaut mieux modifier les constantes $a$ et $b$.

    Kirou, tu peux dérouler la boucle ci-dessous en enlevant le \foreach et en remplaçant \angle par la valeur souhaitée à chaque fois.
    \documentclass[tikz, border=2mm]{standalone}
    \usetikzlibrary{arrows.meta, calc}
    
    \begin{document}
    \begin{tikzpicture}[
      declare function={a=2; b=1;},
      fleche/.style n args={3}{
        insert path={
          let \n1={#1},
          \n2={atan2(a*sin(\n1), b*cos(\n1))} in
          [double, -Implies, double distance=1mm]
          ({a*cos(\n1)}, {b*sin(\n1)}) ++(\n2:#2) -- ++(\n2:#3)
          coordinate (arrivee) \pgfextra{\xdef\lastdir{\n1}}
        }
      },
      ]
    \node at (0,0) {Texte à l'intérieur};
    \draw plot[variable=\t, domain=0:360, smooth, samples=50]
      ({a*cos(\t)}, {b*sin(\t)});
    
    \foreach \angle in {0, 30, 90, 180, 270, 330} {
      \draw[fleche={\angle}{0.1}{1}];
      \path (arrivee) ++(\lastdir:0.1)
        node[anchor={\lastdir+180}] {Paramètre $\angle$};
    }
    \end{tikzpicture}
    \end{document}
    
    105884
  • Si les flèches doivent pointer vers le centre de l'ellipse, on peut faire plus simplement :
    \documentclass[tikz, border=2mm]{standalone}
    \usetikzlibrary{arrows.meta, shapes.geometric}
    
    \begin{document}
    \begin{tikzpicture}[
      pin distance=1cm,
      every pin edge/.style={double, -Implies, double distance=1mm,
                             shorten <=5pt}]
    \node[ellipse, draw, minimum height=10ex,
          pin=30:{Du texte},
          pin=60:{Autre texte},
          pin=90:{etc.},
          pin=left:{À gauche},
          pin=below right:{En bas à droite},
          pin=270:{Voilà}]
      {Texte à l'intérieur};
    \end{tikzpicture}
    \end{document}
    
    105890
  • le 2eme est mieux, puisque avec le premier il écrit la meme chose dans toutes les flèches.

    Je peux mettre encore une flèche devant ect par exemple ?

    Merci
  • 1) Le premier n'écrit pas la même chose dans toutes les flèches : le texte change avec le paramètre. Par ailleurs, je t'ai dit que tu pouvais déplier la boucle \foreach. Il faudrait quand même regarder un minimum le code. 2) Tu peux ajouter les flèches que tu veux. Pourquoi n'essaies-tu pas avant de poser la question ?
  • J'ai essayé dans la première ca m'écrit partout la même chose
    et je n'ai pas su appeler ect pour mettre une flèche à coté de lui.
  • Dérouler la boucle \foreach de cette solution revient à faire quelque chose comme ça :
    \documentclass[tikz, border=1mm]{standalone}
    \usetikzlibrary{arrows.meta, calc}
    
    \begin{document}
    \begin{tikzpicture}[
      declare function={a=2; b=1;},
      fleche/.style n args={3}{
        insert path={
          let \n1={#1},
          \n2={atan2(a*sin(\n1), b*cos(\n1))} in
          [double, -Implies, double distance=1mm]
          ({a*cos(\n1)}, {b*sin(\n1)}) ++(\n2:#2) -- ++(\n2:#3)
          coordinate (arrivee) \pgfextra{\xdef\lastdir{\n1}}
        }
      },
      ]
    \node at (0,0) {Texte à l'intérieur};
    \draw plot[variable=\t, domain=0:360, smooth, samples=50]
      ({a*cos(\t)}, {b*sin(\t)});
    
    \draw[fleche={0}{0.1}{1}];
    \path (arrivee) ++(\lastdir:0.1) node[anchor={\lastdir+180}] {Ah};
    
    \draw[fleche={30}{0.1}{1}];
    \path (arrivee) ++(\lastdir:0.1) node[anchor={\lastdir+180}] {B};
    
    \draw[fleche={90}{0.1}{1}];
    \path (arrivee) ++(\lastdir:0.1) node[anchor={\lastdir+180}] {C};
    
    \draw[fleche={180}{0.1}{1}];
    \path (arrivee) ++(\lastdir:0.1) node[anchor={\lastdir+180}] {$e^{i \pi}$};
    
    \draw[fleche={270}{0.1}{1}];
    \path (arrivee) ++(\lastdir:0.1) node[anchor={\lastdir+180}] {Euh};
    
    \draw[fleche={330}{0.1}{1}];
    \path (arrivee) ++(\lastdir:0.1) node[anchor={\lastdir+180}]
      {$\displaystyle \int_{-\infty}^{+\infty} e^{-x^2} \mathrm{d} x$};
    
    \end{tikzpicture}
    \end{document}
    
    On voit bien que ça n'écrit pas « partout la même chose  ».

    Concernant le « je n'ai pas su appeler ect pour mettre une flèche à coté de lui », je n'y comprends fichtre rien et je crois que tu te fiches un peu de moi. Si tu veux continuer à jouer à la Pythie, il va falloir trouver un autre volontaire.105900
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!