Je cherche à tracer une spirale de Fermat avec tikzpicture. Je cherche non pas à tracer une ligne continue mais à placer des points sur la spirale.

J'ai donc calculé les coordonnées de tous les points (il y en a 113 au total), grâce aux formules :

  • theta = 137.508 * n
  • r = k sqrt(theta)
  • x = r cos(theta)
  • y = r sin(theta)

J'ai fait ces calculs sur un tableur (libreoffice), puis j'ai transféré les coordonnées dans un fichier texte avec gedit.

Ensuite, j'ai traçé la figure avec tikzpicture.

Voici un ECM :

Ouvrir dans l'éditeur Overleaf
 \documentclass[10pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[french]{babel}[2013/05/16]
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{color}
\usepackage{siunitx}
\usepackage[a4paper,margin=6mm]{geometry}

\begin{document}

\begin{center}
\begin{tikzpicture}
% traçé de l'axe des x
\foreach \y in {-10,-9,...,10} \draw(-1,\y)node[left]{\y};
% traçé de l'axe des y
\foreach \x in {-10,-9,...,10} \draw(\x,0)node[below]{\x};

\draw[dotted] plot[mark=ball] file {listepointsspirale};

\end{tikzpicture}
\end{center}

\end{document}

Mes questions sont les suivantes :

  1. comment mettre les coordonnées de chaque point près de chaque point (du genre, avec la commande node) ?
  2. peut-on faire varier la taille des points ? Je voudrais d'abord avoir des points de taille 1 à l'intérieur de la spirale puis des points de taille 7 à l'extérieur, avec entre les deux des tailles intermédiaires.
  3. autre question mais moins importante : est-il possible de ne pas relier les points entre eux ?

Posée 10 Mar, 14:34

ettoremajorana's gravatar image

ettoremajorana
434
Taux d'acceptation : 0%

Modifiée 10 Aoû, 03:01

Pathe's gravatar image

Pathe ♦♦
2.0k662

Pour la question 3 (moins importante) il suffit d'ajouter l'option only marks.

Pour la question 1 on peut le faire avec l'extension pgfplots mais il faut ajouter une troisième colonne (x,y) dans le fichier des données.

La question 2 n'est pas claire pour moi (désolé).

Je ne suis pas un expert tikz donc il peut avoir des solutions plus propres.

(10 Mar, 23:57) touhami touhami's gravatar image

Que sont les points à l'intérieur et à l'extérieur de la spirale si ce doivent être des points de la spirale ? Et que vaut $k$ ?

(11 Mar, 02:26) Bernard Bernard's gravatar image

@Bernard. $k=0.55$. Je souhaiterais transformer ces points en disque dont le diamètre irait de 1 à 7 en taille relative, les plus petits à l'intérieur de la spirale (c'est-à-dire près du centre et les plus grands à l'extérieur de la spirale. En somme, j'essaye de reproduire la figure qu'on peut visualiser à http://flyingpudding.com/projects/florets/applet/ Avec un angle seed de 137,508 degrés. Innermost diameter : 1. Outermost diameter : 7.

(12 Mar, 17:11) ettoremajorana ettoremajorana's gravatar image

@touhami. Merci pour la résolution de la question 3. Impeccable.

(12 Mar, 17:12) ettoremajorana ettoremajorana's gravatar image

@touhami. L'extension pgfplots ne fonctionne pas avec tikz. en effet, "draw[loosely dotted] plot[only marks,mark=ball,pgfplots] file {listepointsspirale};" donne un message d'erreur.

(12 Mar, 17:33) ettoremajorana ettoremajorana's gravatar image

La solution que je propose vous laisse avec un fichier SpFermat.dat. Merci de me faire connaitre s'il convient aux données que vous avez.

(13 Mar, 00:27) touhami touhami's gravatar image
Affichage de 5 parmi 6 Afficher 1 commentaire(s) en plus

À compléter

Une solution basée sur pgfplots.

L'idée et d'ajouter (dans le fichier des données) une troisième colonne (xy) qui contient les coordonnées (x,y) de chaque point.

Exemple fichier des données SpFermat.dat

Ouvrir dans l'éditeur Overleaf
#x    y    (xy)
0.000000000000000000   0.000000000000000000   (0.00,0.00)
-0.518802039868240988   0.475261237035540361   (-0.52,0.48)
0.086998192061317269   -0.991205788208514315   (0.09,-0.99)
0.741456721985263832   0.967123740491808607   (0.74,0.97)
-1.385650965711109962   -0.245125684545435452   (-1.39,-0.25)
1.327463029854904571   -0.844384926658710952   (1.33,-0.84)
-0.447448095958092837   1.664320582527139602   (-0.45,1.66)
-0.857933200213072615   -1.652014595568742482   (-0.86,-1.65)
...

Les mots clés sont nodes near coords={\tiny \pgfplotspointmeta} et point meta=explicit symbolic.

Exemple fichier .tex

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage[a4paper,margin=1cm]{geometry}
\usepackage{pgfplots}

\pagestyle{empty}
\begin{document}

\begin{tikzpicture}[>=latex]
\begin{axis}[nodes near coords={\tiny \pgfplotspointmeta},
  width=20cm,
  height=20cm,
  axis lines=center,
  xlabel style={below right},
  ylabel style={above left},
  xlabel={$x$},
  ylabel={$y$},
  xtick={-10,-9,...,10},
  ytick={-10,-9,...,10},
  xmin=-10.5,
  xmax=10.5,
  ymin=-10.5,
  ymax=10.5]
\addplot[mark=ball, only marks, point meta=explicit symbolic] file {SpFermat.dat};
\end{axis}
\end{tikzpicture}

\end{document}
Lien permanent

Publiée 12 Mar, 19:11

touhami's gravatar image

touhami
2.8k26
Taux d'acceptation : 51%

Modifiée 18 Mar, 22:27

OK. Bon travail. Maintenant, j'aimerais savoir si vous avez une technique pour rentrer les coordonnées rapidement dans la troisième colonne du fichier texte (intitulé listepointsspirale), car j'ai maintenant 440 points ! Et je me vois mal recopier les valeurs à la main !

(16 Mar, 01:19) ettoremajorana ettoremajorana's gravatar image

Question 2 : comment faites-vous pour tracer la ligne qui relie les points ? Est-ce que vous triez les valeurs avant de les recopier dans le fichier texte ? Parce que si je ne trie pas les valeurs, j'obtiens des tas de lignes qui se croisent et de recroisent...

(16 Mar, 01:20) ettoremajorana ettoremajorana's gravatar image

D'accord. En fait, oui, je serai curieux de savoir comment vous tracez la courbe. Et donc, je suis preneur de l'autre méthode de calcul.

(16 Mar, 12:30) ettoremajorana ettoremajorana's gravatar image

Pour tracer la courbe il suffit de compiler le code que j'ai proposé en remplaçant \addplot[mark=ball, only marks, point meta=explicit symbolic] file {\datefile}; par \addplot[mark=ball, smooth, point meta=explicit symbolic] file {\datefile};

(16 Mar, 12:43) touhami touhami's gravatar image

Pour la deuxième méthode, remplacer \FPeval\mtx{.06*root(2,(137.508)*\n)*cos((137.508)*\n)} \FPeval\mty{.06*root(2,(137.508)*\n)*sin((137.508)*\n)}

par \FPeval\mtx{.06*root(2,(137.508)*\n)*cos((137.508)*\n*\FPpi/180)} \FPeval\mty{.06*root(2,(137.508)*\n)*sin((137.508)*\n*\FPpi/180)}

N'oublier pas de supprimer le fichier SpFermat.dat lorsque vous passez d'une méthode à l'outre.

(16 Mar, 12:43) touhami touhami's gravatar image

Avec la deuxième méthode on obtient

alt text

(16 Mar, 12:59) touhami touhami's gravatar image
Affichage de 5 parmi 6 Afficher 1 commentaire(s) en plus
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.

Mots-clés de la question :

×19
×5
×1
×1

Question posée : 10 Mar, 14:34

Question vue : 654 fois

Dernière mise à jour : 18 Mar, 22:27