3
1

Dans l'exemple suivant, que j'ai trouvé dans la doc de PGF/TikZ, comment récupérer les coordonnées des nœuds n1, n2 et n3 ?

Ouvrir dans l'éditeur Overleaf
\documentclass{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
% Les axes
%% Abscisses
\draw[->] (-1, 0) -- (14, 0) ;
%% Ordonnées
\draw[->] (0, -1) -- (0, 2) ;
% La figure
\draw (0,0) .. controls (6,1) and (9,1) ..
node[near start,sloped,above] (n1) {near start}
node (n2) {midway}
node[very near end,sloped,below] (n3) {very near end} (12,0);
\end{tikzpicture}

\end{document}

Posée 30 Sep '17, 21:00

Pathe's gravatar image

Pathe ♦♦
7.4k28196245
Taux d'acceptation : 55%

Modifiée 30 Sep '17, 23:07

ça dépend de ce que vous voulez faire.

(30 Sep '17, 22:51) touhami touhami's gravatar image

Obtenir les valeurs des coordonnées des noeuds pour les utiliser ailleurs. Ce qui revient à me servir de TikZ comme d'une machine à calculer... graphique.

(30 Sep '17, 23:08) Pathe ♦♦ Pathe's gravatar image

Voir page 983, section 96.6 Extracting Coordinates

(30 Sep '17, 23:47) touhami touhami's gravatar image

Grâce au conseil de @touhami, j'ai utilisé la commande \pgfgetlastxy :

Ouvrir dans l'éditeur Overleaf
\documentclass[a5paper, landscape]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
% Les axes
%% Abscisses
\draw[->] (-1, 0) -- (14, 0) ;
%% Ordonnées
\draw[->] (0, -1) -- (0, 2) ;
% La figure
\draw (0,0) .. controls (6,1) and (9,1) ..
    node[midway] (n2) {\Huge .} (12,0);
\pgfpointanchor{n2}{center}
\pgfgetlastxy{\macrox}{\macroy}
\pgfmathsetmacro\macrox{\macrox/1cm}
\pgfmathsetmacro\macroy{\macroy/1cm}
\draw[dotted] (\macrox, 0) node [below] {\macrox} -- (n2) -- (0, \macroy) node [left] {\macroy} ;
% La sauvegarde des coordonnées du point pour une utilisation en dehors de l'environnement tikzpicture
\xdef\macrox{\macrox}%
\xdef\macroy{\macroy}
\end{tikzpicture}

L'abscisse du point est \macrox{} et son ordonnée \macroy{}.
\end{document}

Problème : les coordonnées apparaissent en points ; ces valeurs ne sont pas de la même nature que celles utilisées pour construire ladite figure. Comment faire pour obtenir cela ?

EDIT : le code ci-dessus a été modifié pour tenir compte des suggestions de touhami figurant ci-dessous (ainsi que ci-dessus en ce qui concerne la réutilisation des coordonnées du point en dehors de l'environnement tikzpicture).

Lien permanent

Publiée 01 Oct '17, 18:27

Pathe's gravatar image

Pathe ♦♦
7.4k28196245
Taux d'acceptation : 55%

Modifiée 05 Oct '17, 01:19

1

Vous pouvez utiliser la commande \pgfmathsetmacro comme suit :

\pgfpointanchor{n2}{center}; \pgfgetlastxy{\macrox}{\macroy} \pgfmathsetmacro\macrox{\macrox/1cm} \pgfmathsetmacro\macroy{\macroy/1cm}

(02 Oct '17, 12:33) touhami touhami's gravatar image

Ça fonctionne. J'édite mon code en ce sens.

(02 Oct '17, 15:59) Pathe ♦♦ Pathe's gravatar image

Si on veut utiliser les coordonnées pour la création d'un autre objet graphique, il suffit d'utiliser le nom du nœud

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[->] (-1, 0) -- (14, 0) ;
\draw[->] (0, -1) -- (0, 2) ;
\draw (0,0) .. controls (6,1) and (9,1) ..
node[near start,sloped,above] (n1) {near start}
node (n2) {midway}
node[very near end,sloped,below] (n3) {very near end} (12,0);
\draw[red] (n1) -- (8,2) -- (n3);
\end{tikzpicture}

\end{document}

Remarque Pour des constructions plus compliquées voir la section 14.15 The Let Operation à la page 160 du manuel.

Si on veut récupérer les coordonnées pour affichage par exemple, il y a les commande \pgfextractx, \pgfextracty et \pgfgetlastxy, voir la section 96.6 Extracting Coordinates à la page 983. Voici un exemple basé sur \pgfgetlastxy

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage{tikz}

\newcommand{\getxy}[1]{%
\path #1;
\pgfgetlastxy{\macrox}{\macroy}%
\xdef\macrox{\macrox}%
\xdef\macroy{\macroy}}
\begin{document}

\begin{tikzpicture}
\draw[->] (-1, 0) -- (14, 0) ;
\draw[->] (0, -1) -- (0, 2) ;
\draw (0,0) .. controls (6,1) and (9,1) ..
node[near start,sloped,above] (n1) {near start}
node (n2) {midway}
node[very near end,sloped,below] (n3) {very near end} (12,0);
\getxy{(n3)}
\end{tikzpicture}

\macrox
\end{document}

Remarque On peut utiliser la commande interne \tikz@scan@one@point pour créer la commande \getxy.

Lien permanent

Publiée 01 Oct '17, 12:51

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 01 Oct '17, 13:18

ON remarquera que la commande \macrox est utilisée au sein de l'environnement tikzpicture, mais qu'il en est également extrait, grâce à la commande \xdef, pour être utilisé en dehors de la figure (c'est l'avant-dernière ligne du code).

(05 Oct '17, 01:05) Pathe ♦♦ Pathe's gravatar image
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.