TikZ et calcul dans un node

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
krysttof
Utilisateur confirmé
Utilisateur confirmé
Messages : 25
Inscription : lundi 16 novembre 2020, 16:29
Statut actuel : Autre

TikZ et calcul dans un node

Message non lu par krysttof »

Bonjour à tous,
C'est une question de débutant sur TikZ.

J'ai un graphique qui contient une grille, des axes et une droite calculée et tracée : f(x)=x. Ultra-simple.

Le code de mon exemple :

Code : Tout sélectionner

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[domain=0:3]
	% La grille et les axes
	\draw[gray,very thin] (0,0) grid (4,4);
	\draw[->,thick] (0,0)--(4,0);
	\draw[->,thick] (0,0)--(0,4);
	% La droite f(x)=x
	\draw plot (\x,\x);
	\draw[domain=2:2] plot[only marks,mark=*] (\x,\x) node[above left]{(2,2)};
\end{tikzpicture}

\end{document}
Mon objectif est de pouvoir afficher automatiquement, par calcul, les coordonnées X et Y, du point aux coordonnées (2,2) qui sont affichées "en dur" dans le node : node[above left]{(2,2)}. Un node[above left]{(\x,\x)} ne fonctionne pas.

Comment puis-je faire ?

Merci pour votre aide.
Dernière modification par krysttof le mercredi 05 janvier 2022, 11:51, modifié 2 fois.
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 57
Inscription : samedi 06 février 2016, 11:08

Re: TikZ et calcul dans un node

Message non lu par jmd »

Bonjour,

Voici une solution...

Code : Tout sélectionner

\begin{document}
\begin{tikzpicture}[domain=0:3]
	% La grille et les axes
	\draw[gray,very thin] (0,0) grid (4,4);
	\draw[->,thick] (0,0)--(4,0);
	\draw[->,thick] (0,0)--(0,4);
	% La droite f(x)=x
	\foreach \x in {0,...,3}{
	\draw plot (\x,\x);
	\draw (\x,\x) node{\textbullet};
	\draw (\x,\x) node[above left]{(\x,\x)};}
\end{tikzpicture}
\end{document}
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, TeX Live
krysttof
Utilisateur confirmé
Utilisateur confirmé
Messages : 25
Inscription : lundi 16 novembre 2020, 16:29
Statut actuel : Autre

Re: TikZ et calcul dans un node

Message non lu par krysttof »

Merci jmd pour ta réponse.
Dans ta solution, tous les points de 0 à 3 sont adffichés avec leur coordonnées. Comme je voulais n'avoir qu'un seul point, j'ai adapté ton code :

Code : Tout sélectionner

\begin{tikzpicture}[domain=0:3]
	% La grille et les axes
	\draw[gray,very thin] (0,0) grid (4,4);
	\draw[->,thick] (0,0)--(4,0);
	\draw[->,thick] (0,0)--(0,4);
	% La droite f(x)=x
	\draw plot (\x,\x);
	% Le point et ses coordonnées
	\foreach \x in {2}{
		\draw (\x,\x) node{\textbullet};
		\draw (\x,\x) node[above left]{(\x,\x)};
	}
\end{tikzpicture}
Merci pour cette inspiration très utile !
krysttof
Utilisateur confirmé
Utilisateur confirmé
Messages : 25
Inscription : lundi 16 novembre 2020, 16:29
Statut actuel : Autre

Re: TikZ et calcul dans un node

Message non lu par krysttof »

Après un simple essai, j'ai un problème : si ma droite comporte un simple calcul, la valeur affichée dans le node n'est pas calculée.

Voici mon code :

Code : Tout sélectionner

\begin{tikzpicture}[domain=0:3]
	% La grille et les axes
	\draw[gray,very thin] (0,0) grid (4,5);
	\draw[->,thick] (0,0)--(4,0);
	\draw[->,thick] (0,0)--(0,5);
	% La droite f(x)=x+1
	\draw plot (\x,\x+1);
	% Le point et ses coordonnées
	\foreach \x in {2.5}{
		\draw (\x,\x+1) node{\textbullet};
		\draw (\x,\x+1) node[above left]{(\x,\x+1)};
	}
\end{tikzpicture}
Le node affiche (2.5,2.5+1) et je souhaiterai afficher : (2.5,3.5).

Est-ce possible d'avoir un calcul, une valeur caculée dans le node ?
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 57
Inscription : samedi 06 février 2016, 11:08

Re: TikZ et calcul dans un node

Message non lu par jmd »

Oui, c'est possible :
  • on prépare le calcul avec \pgfmathparse{calcul}.
  • on utilise le résultat avec {\pgfmathresult}.

Code : Tout sélectionner

\begin{tikzpicture}[domain=0:3]
	% La grille et les axes
	\draw[gray,very thin] (0,0) grid (4,5);
	\draw[->,thick] (0,0)--(4,0);
	\draw[->,thick] (0,0)--(0,5);
	% La droite f(x)=x+1
	\draw plot (\x,\x+1);
	% Le point et ses coordonnées
	\foreach \x in {2.5}{
		\draw (\x,\x+1) node{\textbullet};
		\pgfmathparse{1+\x};
		\draw (\x,\x+1) node[above left]{(\x,{\pgfmathresult})};
	}
\end{tikzpicture}
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, TeX Live
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1991
Inscription : samedi 29 décembre 2007, 00:58

Re: TikZ et calcul dans un node

Message non lu par projetmbc »

Comment procéder si l'on veut calculer les deux coordonnées.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 913
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: TikZ et calcul dans un node

Message non lu par un bon petit »

Je ne connais pas du tout tikz et j'ai pas le temps ni l'envie de chercher dans le manuel totalement délirant de ce package.
Je m'en tiens à des basiques de TeX, mais je suis certain que tikz propose des trucs similaires (voire plus puissants).

Je propose de définir 3 macros, une qui définit une fonction (\deffunc), l'autre qui la trace (\plotfunc) et la 3e qui place des points sur la courbes aux abscisses choisies par l'utilisateur (\plotdots).

Code : Tout sélectionner

\documentclass{article}
\usepackage{tikz,siunitx}
\sisetup{locale=FR}
\def\deffunc#1#{\expandafter\def\csname func_\detokenize{#1}\endcsname}
\def\plotfunc#1{\draw plot (\x,\func #1)}
\def\plotdots#1#2{\foreach \x in {#2}{%
	\pgfmathsetmacro\yy{\func #1}%
	\draw(\x,\yy)node{\textbullet}node[above left]{\sisetup{drop-zero-decimal}(\num\x\,;\,\num\yy)};}}
\def\func#1{\csname func_\detokenize{#1}\endcsname}
\begin{document}
\begin{tikzpicture}[domain=0:4]
	\draw[gray,very thin] (0,0) grid (4,4); % tracé grille
	\deffunc f{\x^2/4}                      % définition fonction
	\plotfunc f;                            % tracé fonction
	\plotdots f{2, 3, 3.5}                  % tracé de 3 points
\end{tikzpicture}
\end{document}
Screenshot_20220105_165704.png
Screenshot_20220105_165704.png (8.32 Kio) Consulté 168 fois
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 57
Inscription : samedi 06 février 2016, 11:08

Re: TikZ et calcul dans un node

Message non lu par jmd »

Voilà pour calculer les deux coordonnées...

Code : Tout sélectionner


\begin{tikzpicture}[domain=0:3]
	% La grille et les axes
	\draw[gray,very thin] (0,0) grid (4,5);
	\draw[->,thick] (0,0)--(4,0);
	\draw[->,thick] (0,0)--(0,5);
	% La droite f(x)=x+1
	\draw plot (\x,\x+1);
	% Le point et ses coordonnées
	\foreach \x in {2.5}{
		\draw (-1+\x,\x+1) node{\textbullet};
		\pgfmathsetmacro\ord{1+\x};
		\pgfmathsetmacro\abs{-1+\x};
		\draw (-1+\x,\x+1) node[above left]{(\abs,\ord)};
	}
\end{tikzpicture}
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, TeX Live
krysttof
Utilisateur confirmé
Utilisateur confirmé
Messages : 25
Inscription : lundi 16 novembre 2020, 16:29
Statut actuel : Autre

Re: TikZ et calcul dans un node

Message non lu par krysttof »

Merci jmd pour cette deuxième solution élégante.
Ai-je bien compris ta méthode, si je dis que les calculs sont exécutés par la commande \pgfmathsetmacro et que les résultats sont stockés dans les variables \abs et \ord ?

Et deuxième question, dans la première solution, on pouvait déterminer le nombre de décimale à utiliser avec \pgfmathprintnumber[precision=1]. Avec cette deuxième solution est-ce possible ?
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 57
Inscription : samedi 06 février 2016, 11:08

Re: TikZ et calcul dans un node

Message non lu par jmd »

Oui kristtof tu as bien compris la méthode.
Quant à la deuxième question, je n'ai jamais testé... non plus... :) je vais regarder un de ces jours.
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, TeX Live