Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 4
mineure typo

21 Déc '19, 20:01

Pathe's gravatar image

Pathe
7.6k49210252

Comment réaliser des calculs dans des coordonnées de noeuds sous Tikz TikZ ?

Je souhaite pouvoir dessiner une équerre dans diverses positions (8 exactement : vers la droite/vers la gauche, débout/couchée, debout/couchée, vers le haut/le bas) : elle est modélisée par le triangle ABC rectangle en A. A. Je souhaite automatiser le positionnement de l'équerre grâce à une macro du même nom à l'aide d'options bien choisies. Je dois donc calculer des coordonnées adaptées à chaque situation : l'abscisse de B et l'ordonnée de C. Pour cela j'utilise des variables : 1. \x (pour l'orientation Gauche/Droite), 2. \y (pour l'orientation Haut/Bas) et 3. \z (pour l'orientation Debout/Couchée) dont je modifie les valeurs en fonction des options choisies. Le problème est donc le suivant : comment réaliser des calculs sous Tikz Ti*k*Z et passer les résultats dans les coordonnées des points à tracer avec la commande `\draw` de Tikz Ti*k*Z ? Les solutions que j'ai trouvées actuellement propose proposent d'encadrer les résultats entre accolades mais cela ne fonctionne pas. Les coordonnées cartésiennes à obtenir sont donc : - `A(0,0)` - `B({(5.1 * (\z) + (1 - (\z)) * 3) * (\x)},0)` - `C(0,{(5.1 * (1 - (\z)) + 3 * (\z)) * (\y)})` D'où le code ci-dessous ci-dessous, qui ne compile pas. \documentclass[12pt,a4paper]{article} \usepackage[latin1,utf8]{inputenc} \usepackage[french]{babel} \usepackage[T1]{fontenc} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{lmodern} \usepackage{fourier} \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry} \usepackage{tikz} \usetikzlibrary{patterns,math} \usepackage{tkz-euclide} \usetkzobj{all} \usepackage{xkeyval} \newcount\x \newcount\y \newcount\z \makeatletter %----------> \Equerre <---------- \definecolor{bleuI}{cmyk}{.2,.1,.1,.1}%black!50!blue!20! \definecolor{bleuB}{cmyk}{0.2,0.4,0.4,0.05}%black!30!blue!70! \define@cmdkey [DES] {Equerre} {inclinaison}{} \define@cmdkey [DES] {Equerre} {CouleurInterieure}{} \define@cmdkey [DES] {Equerre} {CouleurBord}{} \define@cmdkey [DES] {Equerre} {bord}{} \define@boolkey [DES] {Equerre} {xorientation}[true]{} % Gauche/Droite \define@boolkey [DES] {Equerre} {yorientation}[true]{} % Haut/Bas \define@boolkey [DES] {Equerre} {zorientation}[true]{} %Débout/Couchée \define@cmdkey [DES] {Equerre} {xscale}{} \define@cmdkey [DES] {Equerre} {yscale}{} \presetkeys [DES] {Equerre} { inclinaison = 0, CouleurInterieure = black!50!blue!20!, CouleurBord = black!30!blue!70!, bord=thick, xscale=1, yscale=1 }{} % \newcommand{\Equerre}[2][]{% \setkeys[DES]{Equerre}{#1} \begin{scope}[shift={(#2)}, rotate=\cmdDES@Equerre@inclinaison, xscale=\cmdDES@Equerre@xscale, yscale=\cmdDES@Equerre@yscale] \ifDES@Equerre@xorientation \x = 1 % équerre dessinée vers la droite de l'axe des ordonnées \else \x = -1 % équerre dessinée vers la gauche de l'axe des ordonnées \fi \ifDES@Equerre@yorientation \y = 1 % équerre dessinée au-dessus de l'axe des abscisses \else \y = -1 % équerre dessinée en-dessous de l'axe des abscisses \fi \ifDES@Equerre@zorientation \z = 1 % équerre dessinée "debout" \else \z = 0 % équerre dessinée "couchée" \fi %\draw (\x,\y) node[green,below]{$\times$}; %\draw (\x,\y) node[green,below]{O}; %\coordinate(A) at (0,0); %\coordinate(B) at ({(5.1 * \z + (1 - \z) * 3) * \x},0); %\coordinate(C) at (0,{3*\y}); % Bord extérieur %\draw[\cmdDES@Equerre@bord,color=\cmdDES@Equerre@CouleurBord,fill=\cmdDES@Equerre@CouleurInterieure] %(A) -- (B) -- (C) -- cycle; \draw[\cmdDES@Equerre@bord, color=\cmdDES@Equerre@CouleurBord, fill=\cmdDES@Equerre@CouleurInterieure, evaluate={ \xB = (5.1 * (\z) + (1 - (\z)) * 3) * (\x); \yC = 3 * (\y); } ] (0,0) -- (\xB ,0) -- (0,\yC) -- cycle; %\draw[\cmdDES@Equerre@bord,color=\cmdDES@Equerre@CouleurBord,fill=\cmdDES@Equerre@CouleurInterieure] %(0,0) -- ({5.1*\x},0) -- (0,{-3*\y}) -- cycle; % Bord intérieur %\draw[\cmdDES@Equerre@bord,color=\cmdDES@Equerre@CouleurBord,fill=white,smooth,rounded corners=3pt,opacity=1] %(0.6,{-0.6*\y}) -- (1.8,{-0.5*\y}) -- (3,{-0.6*\y}) -- (1.75,{-1.45*\y}) -- (0.6,{-1.975*\y}) -- (0.5,{-1.3*\y}) -- cycle; % codage de l'angle droit \draw[color=red] ({(-0.4/\cmdDES@Equerre@xscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\x},0) -- ({(-0.4/\cmdDES@Equerre@xscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\x}, {(-0.4/\cmdDES@Equerre@yscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\y}) -- (0,{(-0.4/\cmdDES@Equerre@yscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\y}); \end{scope} } \makeatother \begin{document} \section*{Équerre} \begin{tikzpicture} \Equerre[CouleurInterieure=yellow]{1,1} \Equerre[CouleurInterieure=green,yorientation=false]{1,-1} % équerre couchée vers la droite ??? \Equerre[CouleurInterieure=blue,xorientation=false,yorientation=false]{-1,-1} % équerre vers le bas ??? \Equerre[CouleurInterieure=red,xorientation=false]{-1,1} % équerre vers le bas ??? \draw (0,0) node[red]{$\times$}; \draw (0,0) node[red,below]{O}; \end{tikzpicture} \begin{tikzpicture} \Equerre[inclinaison=90,CouleurInterieure=yellow,xscale=1,yscale=1]{-1,-1} \Equerre[bord=dashed,inclinaison=-60,CouleurBord=red,xscale=1.5,yscale=.75]{4,1} \Equerre[bord=dashed,inclinaison=30,CouleurBord=black,CouleurInterieure=cyan,xscale=0.5,yscale=0.5]{5,-5} \end{tikzpicture} \begin{tikzpicture} \Equerre[CouleurInterieure=yellow]{0,0} \Equerre[CouleurInterieure=orange]{9,0} \Equerre[CouleurInterieure=green,yorientation=false]{0,-6} \Equerre[CouleurInterieure=blue,xorientation=false,yorientation=false]{9,-6} \end{tikzpicture} \end{document}
cliquez ici pour masquer/afficher la révision 3
mineure typo

21 Déc '19, 19:35

Pathe's gravatar image

Pathe
7.6k49210252

Comment réaliser des calculs dans des coordonnées de noeuds sous Tikz ?

Je souhaite pouvoir dessiner une équerre dans diverses positions (8 exactement : vers la droite/vers la gauche, débout/couchée, vers le haut/le bas) : elle est modélisée par le triangle ABC rectangle en A. Je souhaite automatiser le positionnement de l'équerre grâce à une macro du même nom à l'aide d'options bien choisies. Je dois donc calculer des coordonnées adaptées à chaque situation : l'abscisse de B et l'ordonnée de C. Pour cela j'utilise des variables : 1. \x (pour l'orientation Gauche/Droite), 2. \y (pour l'orientation Haut/Bas) et 3. \z (pour l'orientation Debout/Couchée) dont je modifie les valeurs en fonction des options choisies. Le problème est donc le suivant : comment réaliser des calculs sous Tikz et passer les résultats dans les coordonnées des points à tracer avec la commande `\draw` de Tikz ? Les solutions que j'ai trouvées actuellement propose d'encadrer les résultats entre accolades mais cela ne fonctionne pas. Les coordonnées cartésiennes à obtenir sont donc : - `A(0,0)` - `B({(5.1 * (\z) + (1 - (\z)) * 3) * (\x)},0)` - `C(0,{(5.1 * (1 - (\z)) + 3 * (\z)) * (\y)})` D'où le code ci-dessous qui ne compile pas. \documentclass[12pt,a4paper]{article} \usepackage[latin1,utf8]{inputenc} \usepackage[french]{babel} \usepackage[T1]{fontenc} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{lmodern} \usepackage{fourier} \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry} \usepackage{tikz} \usetikzlibrary{patterns,math} \usepackage{tkz-euclide} \usetkzobj{all} \usepackage{xkeyval} \newcount\x \newcount\y \newcount\z \makeatletter %----------> \Equerre <---------- \definecolor{bleuI}{cmyk}{.2,.1,.1,.1}%black!50!blue!20! \definecolor{bleuB}{cmyk}{0.2,0.4,0.4,0.05}%black!30!blue!70! \define@cmdkey [DES] {Equerre} {inclinaison}{} \define@cmdkey [DES] {Equerre} {CouleurInterieure}{} \define@cmdkey [DES] {Equerre} {CouleurBord}{} \define@cmdkey [DES] {Equerre} {bord}{} \define@boolkey [DES] {Equerre} {xorientation}[true]{} % Gauche/Droite \define@boolkey [DES] {Equerre} {yorientation}[true]{} % Haut/Bas \define@boolkey [DES] {Equerre} {zorientation}[true]{} %Débout/Couchée \define@cmdkey [DES] {Equerre} {xscale}{} \define@cmdkey [DES] {Equerre} {yscale}{} \presetkeys [DES] {Equerre} { inclinaison = 0, CouleurInterieure = black!50!blue!20!, CouleurBord = black!30!blue!70!, bord=thick, xscale=1, yscale=1 }{} % \newcommand{\Equerre}[2][]{% \setkeys[DES]{Equerre}{#1} \begin{scope}[shift={(#2)}, rotate=\cmdDES@Equerre@inclinaison, xscale=\cmdDES@Equerre@xscale, yscale=\cmdDES@Equerre@yscale] \ifDES@Equerre@xorientation \x = 1 % équerre dessinée vers la droite de l'axe des ordonnées \else \x = -1 % équerre dessinée vers la gauche de l'axe des ordonnées \fi \ifDES@Equerre@yorientation \y = 1 % équerre dessinée au-dessus de l'axe des abscisses \else \y = -1 % équerre dessinée en-dessous de l'axe des abscisses \fi \ifDES@Equerre@zorientation \z = 1 % équerre dessinée "debout" \else \z = 0 % équerre dessinée "couchée" \fi %\draw (\x,\y) node[green,below]{$\times$}; %\draw (\x,\y) node[green,below]{O}; %\coordinate(A) at (0,0); %\coordinate(B) at ({(5.1 * \z + (1 - \z) * 3) * \x},0); %\coordinate(C) at (0,{3*\y}); % Bord extérieur %\draw[\cmdDES@Equerre@bord,color=\cmdDES@Equerre@CouleurBord,fill=\cmdDES@Equerre@CouleurInterieure] %(A) -- (B) -- (C) -- cycle; \draw[\cmdDES@Equerre@bord, color=\cmdDES@Equerre@CouleurBord, fill=\cmdDES@Equerre@CouleurInterieure, evaluate={ \xB = (5.1 * (\z) + (1 - (\z)) * 3) * (\x); \yC = 3 * (\y); } ] (0,0) -- (\xB ,0) -- (0,\yC) -- cycle; %\draw[\cmdDES@Equerre@bord,color=\cmdDES@Equerre@CouleurBord,fill=\cmdDES@Equerre@CouleurInterieure] %(0,0) -- ({5.1*\x},0) -- (0,{-3*\y}) -- cycle; % Bord intérieur %\draw[\cmdDES@Equerre@bord,color=\cmdDES@Equerre@CouleurBord,fill=white,smooth,rounded corners=3pt,opacity=1] %(0.6,{-0.6*\y}) -- (1.8,{-0.5*\y}) -- (3,{-0.6*\y}) -- (1.75,{-1.45*\y}) -- (0.6,{-1.975*\y}) -- (0.5,{-1.3*\y}) -- cycle; % codage de l'angle droit \draw[color=red] ({(-0.4/\cmdDES@Equerre@xscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\x},0) -- ({(-0.4/\cmdDES@Equerre@xscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\x}, {(-0.4/\cmdDES@Equerre@yscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\y}) -- (0,{(-0.4/\cmdDES@Equerre@yscale)*min(\cmdDES@Equerre@xscale,\cmdDES@Equerre@yscale)*\y}); \end{scope} } \makeatother \begin{document} \section*{Equerre} \section*{Équerre} \begin{tikzpicture} \Equerre[CouleurInterieure=yellow]{1,1} \Equerre[CouleurInterieure=green,yorientation=false]{1,-1} % équerre couchée vers la droite ??? \Equerre[CouleurInterieure=blue,xorientation=false,yorientation=false]{-1,-1} % équerre vers le bas ??? \Equerre[CouleurInterieure=red,xorientation=false]{-1,1} % équerre vers le bas ??? \draw (0,0) node[red]{$\times$}; \draw (0,0) node[red,below]{O}; \end{tikzpicture} \begin{tikzpicture} \Equerre[inclinaison=90,CouleurInterieure=yellow,xscale=1,yscale=1]{-1,-1} \Equerre[bord=dashed,inclinaison=-60,CouleurBord=red,xscale=1.5,yscale=.75]{4,1} \Equerre[bord=dashed,inclinaison=30,CouleurBord=black,CouleurInterieure=cyan,xscale=0.5,yscale=0.5]{5,-5} \end{tikzpicture} \begin{tikzpicture} \Equerre[CouleurInterieure=yellow]{0,0} \Equerre[CouleurInterieure=orange]{9,0} \Equerre[CouleurInterieure=green,yorientation=false]{0,-6} \Equerre[CouleurInterieure=blue,xorientation=false,yorientation=false]{9,-6} \end{tikzpicture} \end{document}
cliquez ici pour masquer/afficher la révision 2
code

21 Déc '19, 18:01

samcarter's gravatar image

samcarter
8.6k2817

cliquez ici pour masquer/afficher la révision 1

21 Déc '19, 15:57

pdesmons's gravatar image

pdesmons
294919