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 `\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)
`A(0,0)`
- B({(5.1 `B({(5.1 * (\z) + (1 - (\z)) * 3) * (\x)},0)
(\x)},0)`
- C(0,{(5.1 `C(0,{(5.1 * (1 - (\z)) + 3 * (\z)) * (\y)})
(\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}
\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}