Dans le cadre de mon travail, j'ai régulièrement à dessiner des terrains de sport à partir de leurs dimensions officielles. Mon fil sur le déplacement de figures m'amène à formaliser cette question. À titre d'exemple, voici un court de tennis, tel que publié sur Wikimedia Commons : Et voici un ECM : Ouvrir dans l'éditeur Overleaf
\documentclass[10pt, BCOR=0pt, DIV=22, a4paper]{scrartcl} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{tikz} \begin{document} \thispagestyle{empty} \begin{center} \begin{tikzpicture}[x = 1 mm, y = 1 mm] \draw[thick, gray] (0, 0) rectangle (109.7, 237.8) ; \draw[thick, gray] (0, 0) rectangle (13.7, 237.8) ; \draw[thick, gray] (96, 0) rectangle (109.7, 237.8) ; \draw[thick, gray] (0, 0) rectangle (109.7, 118.9) ; \draw[thick, gray] (13.7, 0) rectangle (96, 54.9) ; \draw[thick, gray] (13.7, 118.9) rectangle (96, 182.9) ; \draw[thick, gray] (54.85, 54.9) rectangle (96, 182.9) ; \draw[thick, gray] (54.85, 0) -- (54.85, 0.88) ; \draw[thick, gray] (54.85, 237.8) -- (54.85, 236.92) ; \end{tikzpicture} \end{center} \end{document} Il va de soi qu'un tel mode de représentation n'est pas efficace : ce ne sont là que des coordonnées, aucun coin n'a de nom, etc. Comment dessiner ce court plus efficacement avec TikZ : définir un node pour chaque coin ? Définir ces nodes par rapport à un node référence ? Je ne cherche pas une solution, mais plutôt une méthode de travail. PS : il ne s'agit pas de reproduire les légendes. Seul un dessin à l'échelle m'intéresse. Posée 05 Nov '17, 16:10 Pathe ♦♦ |
Voici une façon de faire sans node, il suffira d'adapter les dimensions exactes aux rectangles (j'ai eu la flemme de convertir les feet :) ) Ouvrir dans l'éditeur Overleaf
\documentclass[tikz,border=2mm]{standalone} \usetikzlibrary{backgrounds} \newcommand{\halffoot}{ \draw (0,0) rectangle (10,12); \draw (0,3) rectangle ++(3.5,6); \draw (0,4) rectangle ++(1,4); \draw (0,5) rectangle ++(-0.2,2); \draw (0.3,0) arc (0:90:.3); \draw (0.3,12) arc (0:-90:.3); \draw[fill= white] (2.5,6) circle (2pt); \draw (10,7.6) arc (90:270:1.6); \begin{scope} \clip (3.5,0) rectangle ++(4,12); \draw (12.5,6) circle (2cm); \end{scope} } \newcommand{\halftennis}{ \draw (0,0) rectangle (12,11); \draw (0,0) rectangle ++(12,1.2); \draw (0,11) rectangle ++(12,-1.2); \draw (6,1.2) rectangle ++(6,8.6); \draw (0.0,5.5) -- (0.2,5.5); \draw (6,5.5) -- (12,5.5); \draw[fill=white] (11.9,-0.4) rectangle ++ (0.1,-.2); \draw[fill=white] (11.9,11.4) rectangle ++ (0.1,0.2); } \definecolor{green}{rgb}{0.0, 0.5, 0.0} \begin{document} \begin{tikzpicture}[background rectangle/.style={fill=orange}, show background rectangle, draw=white] \halftennis \begin{scope}[xshift=24cm, xscale=-1] \halftennis \end{scope} \draw (12,-0.5) -- (12,11.5); \end{tikzpicture} \begin{tikzpicture}[background rectangle/.style={fill=green}, show background rectangle, draw=white] \halffoot \begin{scope}[xshift=20cm, xscale=-1] \halffoot \end{scope} \draw[fill=white] (10,6) circle (2pt); \end{tikzpicture} \end{document} PS: Comme j'ai pas converti les longueurs exactes, pour me faire pardonner, il y à le terrain de foot en cadeau. EDIT : Je rajoute le terrain de Handball, qui lui est fait de node et à l'echelle. Ouvrir dans l'éditeur Overleaf
\documentclass[tikz,border=2mm]{standalone} \usetikzlibrary{backgrounds} \definecolor{orange}{RGB}{255,163,44} \definecolor{bleuprofond}{RGB}{35,138,181} \definecolor{bleuint}{RGB}{46,181,236} \begin{document} \begin{tikzpicture}[background rectangle/.style={fill=bleuprofond}, show background rectangle, draw=white, line width=1pt] \node[] (A) at (0,0) {}; \node[] (B) at (0,4) {}; \node[] (C) at (8,4) {}; \node[] (D) at (8,0) {}; \node[] (E) at (0,1.7) {};%but \node[] (F) at (0,2.3) {};%but \node[] (G) at (4,0) {};%centre \node[] (H) at (4,4) {};%centre \draw[fill=bleuint] (A.center) -- (B.center)-- (C.center)-- (D.center)-- (A.center)-- cycle; \draw[fill=orange] (E) ++ (1.2,0) arc (0:-90:1.2); \draw[fill=orange] (F) ++ (1.2,0) arc (0:90:1.2); \draw[dashed] (E) ++ (1.8,0) arc (0:-70:1.8); \draw[dashed,dash phase=-2pt] (F) ++ (1.8,0) arc (0:70:1.8); \draw (1.2,1.7) -- (1.2,2.3); \draw[dashed] (1.8,1.8) -- (1.8,2.3); \draw (E.center) rectangle (F.west); \fill[fill=orange] (0.01765,.5172)--(1.18236,1.665)--(1.18236,2.335)--(0.01765,3.4824); \fill[fill=orange] (7.98235,.5172)--(6.81764,1.665)--(6.81764,2.335)--(7.98235,3.4824); \draw (0.8,1.97)--(0.8,2.03); \draw (1.4,1.9)--(1.4,2.1); \draw (A.center) ++ (3.1,0) (3.1,-0.03)--(3.1,.03); %fin partie gauche \draw (H.center) -- (G.center); %début partie droite \node[] (I) at (8,1.7) {};%but \node[] (J) at (8,2.3) {};%but \draw[fill=orange] (I) ++ (-1.2,0) arc (180:270:1.2); \draw[fill=orange] (J) ++ (-1.2,0) arc (180:90:1.2); \draw[dashed,dash phase=-2pt] (J) ++ (-1.8,0) arc (180:110:1.8); \draw[dashed] (I) ++ (-1.8,0) arc (180:250:1.8); \draw(6.8,1.7) -- (6.8,2.3); \draw[dashed] (6.2,1.8) -- (6.2,2.3); \draw (I.center) rectangle (J.east); \draw (7.2,1.97)--(7.2,2.03); \draw (6.6,1.9)--(6.6,2.1); \draw (A.center) ++ (4.9,0) (4.9,-0.03)--(4.9,.03); \end{tikzpicture} \end{document} Publiée 07 Nov '17, 23:38 Nikopol Arf... je viens de voir qu'un ecm a été ajouté. On peut toujours faire la même chose avec des nodes, mais est-ce utile dans ce cas? Avez vous besoin de les réutiliser par la suite ? C'est toujours possible mais ça fait beaucoup de nodes... Donc, si ce n'est pas utile ça me parait une méthode acceptable.
(07 Nov '17, 23:50)
Nikopol
@Nikopol : un terrain de handball mesure 40 x 20 m. Vous avez divisé par 5 les longueurs exprimées en mètres ?
(12 Nov '17, 00:52)
Pathe ♦♦
oui, pour ne pas avoir un dessin trop grand, les nombres décimaux dans le code correspondent à des conversions de points en centimètres.
(12 Nov '17, 01:25)
Nikopol
|