Rédigé le : 19/04/2024
Sommaire
Dans cet article, nous allons explorer comment utiliser TikZ et le paquet OutilsGeomTikz pour créer des constructions géométriques comme dans l’exemple ci-dessous :
Voici le code \(\LaTeX\) correspondant à l’image ci-dessus :
\documentclass{standalone}
\usepackage{tikz}
\usepackage{OutilsGeomTikz}
\usepackage{amsmath}
\usepackage{geometry}
\geometry{a4paper, margin=1in}
\newcommand{\drawCross}[2]{
\draw[line width=1pt] (#1,#2) -- ++(-0.1,-0.1);
\draw[line width=1pt] (#1,#2) -- ++(0.1,0.1);
\draw[line width=1pt] (#1,#2) -- ++(-0.1,0.1);
\draw[line width=1pt] (#1,#2) -- ++(0.1,-0.1);
}
\newcommand{\drawCrossP}[1]{
\path (#1) coordinate (coord);
\draw[line width=1pt] (coord) -- ++(-0.1,-0.1);
\draw[line width=1pt] (coord) -- ++(0.1,0.1);
\draw[line width=1pt] (coord) -- ++(-0.1,0.1);
\draw[line width=1pt] (coord) -- ++(0.1,-0.1);
}
\begin{document}
\begin{minipage}{1\textwidth}
\begin{minipage}{0.3\textwidth}
\begin{tikzpicture}[scale=0.6]
% Définir les points A et O
\coordinate (O) at (0,0);
\coordinate (A) at (-1,+2);
\coordinate (B) at (-3,+3);
\coordinate (C) at (-3,0);
\coordinate (D) at (-3,-1.5);
\coordinate (Ap) at (+1,-2);
\coordinate (Bp) at (+3,-3);
% Extraire les coordonnées de A
\path (Ap); \pgfgetlastxy{\Apx}{\Apy};
% Extraire les coordonnées de B
\path (Bp); \pgfgetlastxy{\Bpx}{\Bpy};
% Calcul des coordonnées de P après rotation de 20° autour de O en maintenant la même distance
\coordinate (P) at ({cos(10)*(3) - sin(10)*(-3)},{sin(10)*(+3) + cos(10)*(-3)});
% Tracer les arcs autour de A' et B'
\draw[red,line width=1pt] (Ap) arc[start angle={atan2(\Apy,\Apx)}, end angle={atan2(sin(25)*\Apx + cos(25)*\Apy,cos(25)*\Apx - sin(25)*\Apy)}, radius={sqrt(\Apx*\Apx + \Apy*\Apy)}];
\draw[red,line width=1pt] (Ap) arc[start angle={atan2(\Apy,\Apx)}, end angle={atan2(sin(-20)*\Apx + cos(-20)*\Apy,cos(-20)*\Apx - sin(-20)*\Apy)}, radius={sqrt(\Apx*\Apx + \Apy*\Apy)}];
\draw[red,line width=1pt] (Bp) arc[start angle={atan2(\Bpy,\Bpx)}, end angle={atan2(sin(25)*\Bpx + cos(25)*\Bpy,cos(25)*\Bpx - sin(25)*\Bpy)}, radius={sqrt(\Bpx*\Bpx + \Bpy*\Bpy)}];
\draw[red,line width=1pt] (Bp) arc[start angle={atan2(\Bpy,\Bpx)}, end angle={atan2(sin(-20)*\Bpx + cos(-20)*\Bpy,cos(-20)*\Bpx - sin(-20)*\Bpy)}, radius={sqrt(\Bpx*\Bpx + \Bpy*\Bpy)}];
\drawCross{0}{0}
\drawCross{-1}{+2}
\drawCross{-3}{+3}
\drawCross{-3}{0}
\drawCross{-3}{-1.5}
\drawCross{+1}{-2}
\drawCross{+3}{-3}
\draw (O) node[below left] {$O$};
\draw (A) node[above] {$A$};
\draw (B) node[left] {$B$};
\draw (C) node[left] {$C$};
\draw (D) node[left] {$D$};
\draw (Ap) node[left] {$A'$};
\draw (Bp) node[right] {$B'$};
\draw[line width=1pt] (A) -- (B);
\draw[line width=1pt] (D) -- (B);
\draw[line width=1pt] (C) -- (A);
\draw[dashed,line width=1pt] (A) -- ($(A)!2.25!(O)$);
\draw[dashed,line width=1pt] (B) -- ($(B)!2.25!(O)$);
\draw[line width=1pt,blue!80] (Ap) -- (Bp);
% Codage égalité de longueur
\draw[line width=0.75pt] ($($(A)!0.48!(O)$)!0.15cm!90:(O)$) -- ($($(A)!0.48!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(O)!0.48!(Ap)$)!0.15cm!90:(Ap)$) -- ($($(O)!0.48!(Ap)$)!0.15cm!-90:(Ap)$);
\draw[line width=0.75pt] ($($(A)!0.52!(O)$)!0.15cm!90:(O)$) -- ($($(A)!0.52!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(O)!0.52!(Ap)$)!0.15cm!90:(Ap)$) -- ($($(O)!0.52!(Ap)$)!0.15cm!-90:(Ap)$);
\draw[line width=0.75pt] ($($(B)!0.6!(O)$)!0.15cm!90:(O)$) -- ($($(B)!0.6!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(Bp)!0.5!(O)$)!0.15cm!90:(O)$) -- ($($(Bp)!0.5!(O)$)!0.15cm!-90:(O)$);
\tkzCompas[LongueurBranches=4,LongueurCrayon=2,CouleurCrayon=red]{O}{P}
\end{tikzpicture}
On construit les points $A'$ et $B'$, symétriques des points $A$ et $B$ par rapport a $O$. On trace le segment $[A'B']$.\medskip
\end{minipage}
\hfill\vline\hfill
\begin{minipage}{0.3\textwidth}
\begin{tikzpicture}[scale=0.6]
% Définir les points A et O
\coordinate (O) at (0,0);
\coordinate (A) at (-1,+2);
\coordinate (B) at (-3,+3);
\coordinate (C) at (-3,0);
\coordinate (D) at (-3,-1.5);
\coordinate (Ap) at (+1,-2);
\coordinate (Bp) at (+3,-3);
\coordinate (Dp) at (+3,+1.5);
% Extraire les coordonnées de A et B
\path (Ap); \pgfgetlastxy{\Apx}{\Apy};
\path (Bp); \pgfgetlastxy{\Bpx}{\Bpy};
% Extraire les coordonnées de D
\path (Dp); \pgfgetlastxy{\Dpx}{\Dpy};
% Calcul des coordonnées de P après rotation de 20° autour de O en maintenant la même distance
\coordinate (P) at ({cos(10)*(3) - sin(10)*(1.5)},{sin(10)*(+3) + cos(10)*(1.5)});
% Tracer les arcs autour de A' et B'
\draw[red,line width=1pt] (Ap) arc[start angle={atan2(\Apy,\Apx)}, end angle={atan2(sin(25)*\Apx + cos(25)*\Apy,cos(25)*\Apx - sin(25)*\Apy)}, radius={sqrt(\Apx*\Apx + \Apy*\Apy)}];
\draw[red,line width=1pt] (Ap) arc[start angle={atan2(\Apy,\Apx)}, end angle={atan2(sin(-20)*\Apx + cos(-20)*\Apy,cos(-20)*\Apx - sin(-20)*\Apy)}, radius={sqrt(\Apx*\Apx + \Apy*\Apy)}];
\draw[red,line width=1pt] (Bp) arc[start angle={atan2(\Bpy,\Bpx)}, end angle={atan2(sin(25)*\Bpx + cos(25)*\Bpy,cos(25)*\Bpx - sin(25)*\Bpy)}, radius={sqrt(\Bpx*\Bpx + \Bpy*\Bpy)}];
\draw[red,line width=1pt] (Bp) arc[start angle={atan2(\Bpy,\Bpx)}, end angle={atan2(sin(-20)*\Bpx + cos(-20)*\Bpy,cos(-20)*\Bpx - sin(-20)*\Bpy)}, radius={sqrt(\Bpx*\Bpx + \Bpy*\Bpy)}];
% Tracer les arcs autour de D'
\draw[red,line width=1pt] (Dp) arc[start angle={atan2(\Dpy,\Dpx)}, end angle={atan2(sin(25)*\Dpx + cos(25)*\Dpy,cos(25)*\Dpx - sin(25)*\Dpy)}, radius={sqrt(\Dpx*\Dpx + \Dpy*\Dpy)}];
\draw[red,line width=1pt] (Dp) arc[start angle={atan2(\Dpy,\Dpx)}, end angle={atan2(sin(-20)*\Dpx + cos(-20)*\Dpy,cos(-20)*\Dpx - sin(-20)*\Dpy)}, radius={sqrt(\Dpx*\Dpx + \Dpy*\Dpy)}];
\drawCross{0}{0}
\drawCross{-1}{+2}
\drawCross{-3}{+3}
\drawCross{-3}{0}
\drawCross{-3}{-1.5}
\drawCross{+1}{-2}
\drawCross{+3}{-3}
\drawCross{+3}{+1.5}
\draw (O) node[below left] {$O$};
\draw (A) node[above] {$A$};
\draw (B) node[left] {$B$};
\draw (C) node[left] {$C$};
\draw (D) node[left] {$D$};
\draw (Ap) node[left] {$A'$};
\draw (Bp) node[right] {$B'$};
\draw (Dp) node[right] {$D'$};
\draw[line width=1pt] (A) -- (B);
\draw[line width=1pt] (D) -- (B);
\draw[line width=1pt] (C) -- (A);
\draw[line width=1pt,blue!80] (Ap) -- (Bp);
\draw[line width=1pt,blue!80] (Dp) -- (Bp);
\draw[dashed,line width=1pt] (D) -- ($(D)!2.25!(O)$);
% Codage égalité de longueur
\draw[line width=0.75pt] ($($(D)!0.48!(O)$)!0.15cm!90:(O)$) -- ($($(D)!0.52!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(Dp)!0.48!(O)$)!0.15cm!90:(O)$) -- ($($(Dp)!0.52!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(D)!0.52!(O)$)!0.15cm!90:(O)$) -- ($($(D)!0.48!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(Dp)!0.52!(O)$)!0.15cm!90:(O)$) -- ($($(Dp)!0.48!(O)$)!0.15cm!-90:(O)$);
\tkzCompas[LongueurBranches=4,LongueurCrayon=2,CouleurCrayon=red]{O}{P}
\end{tikzpicture}
On construit le point $D'$,
symétrique du point $D$ par
rapport à $O$. On trace le
segment $[B'D']$.\medskip
\end{minipage}
\hfill\vline\hfill
\begin{minipage}{0.3\textwidth}
\begin{tikzpicture}[scale=0.6]
% Définir les points A et O
\coordinate (O) at (0,0);
\coordinate (A) at (-1,+2);
\coordinate (B) at (-3,+3);
\coordinate (C) at (-3,0);
\coordinate (D) at (-3,-1.5);
\coordinate (Ap) at (+1,-2);
\coordinate (Bp) at (+3,-3);
\coordinate (Dp) at (+3,+1.5);
\coordinate (Cp) at (+3,0);
% Extraire les coordonnées de A et B
\path (Ap); \pgfgetlastxy{\Apx}{\Apy};
\path (Bp); \pgfgetlastxy{\Bpx}{\Bpy};
% Extraire les coordonnées de D
\path (Dp); \pgfgetlastxy{\Dpx}{\Dpy};
% Tracer les arcs autour de A' et B'
\draw[red,line width=1pt] (Ap) arc[start angle={atan2(\Apy,\Apx)}, end angle={atan2(sin(25)*\Apx + cos(25)*\Apy,cos(25)*\Apx - sin(25)*\Apy)}, radius={sqrt(\Apx*\Apx + \Apy*\Apy)}];
\draw[red,line width=1pt] (Ap) arc[start angle={atan2(\Apy,\Apx)}, end angle={atan2(sin(-20)*\Apx + cos(-20)*\Apy,cos(-20)*\Apx - sin(-20)*\Apy)}, radius={sqrt(\Apx*\Apx + \Apy*\Apy)}];
\draw[red,line width=1pt] (Bp) arc[start angle={atan2(\Bpy,\Bpx)}, end angle={atan2(sin(25)*\Bpx + cos(25)*\Bpy,cos(25)*\Bpx - sin(25)*\Bpy)}, radius={sqrt(\Bpx*\Bpx + \Bpy*\Bpy)}];
\draw[red,line width=1pt] (Bp) arc[start angle={atan2(\Bpy,\Bpx)}, end angle={atan2(sin(-20)*\Bpx + cos(-20)*\Bpy,cos(-20)*\Bpx - sin(-20)*\Bpy)}, radius={sqrt(\Bpx*\Bpx + \Bpy*\Bpy)}];
% Tracer les arcs autour de D'
\draw[red,line width=1pt] (Dp) arc[start angle={atan2(\Dpy,\Dpx)}, end angle={atan2(sin(25)*\Dpx + cos(25)*\Dpy,cos(25)*\Dpx - sin(25)*\Dpy)}, radius={sqrt(\Dpx*\Dpx + \Dpy*\Dpy)}];
\draw[red,line width=1pt] (Dp) arc[start angle={atan2(\Dpy,\Dpx)}, end angle={atan2(sin(-20)*\Dpx + cos(-20)*\Dpy,cos(-20)*\Dpx - sin(-20)*\Dpy)}, radius={sqrt(\Dpx*\Dpx + \Dpy*\Dpy)}];
\drawCross{0}{0}
\drawCross{-1}{+2}
\drawCross{-3}{+3}
\drawCross{-3}{0}
\drawCross{-3}{-1.5}
\drawCross{+1}{-2}
\drawCross{+3}{-3}
\drawCross{+3}{+1.5}
\drawCross{+3}{0}
\draw (O) node[below left] {$O$};
\draw (A) node[above] {$A$};
\draw (B) node[left] {$B$};
\draw (C) node[left] {$C$};
\draw (D) node[left] {$D$};
\draw (Ap) node[left] {$A'$};
\draw (Bp) node[right] {$B'$};
\draw (Dp) node[above right] {$D'$};
\draw (Cp) node[right] {$C'$};
\draw[line width=1pt] (A) -- (B);
\draw[line width=1pt] (D) -- (B);
\draw[line width=1pt] (C) -- (A);
\draw[line width=1pt,blue!80] (Ap) -- (Bp);
\draw[line width=1pt,blue!80] (Dp) -- (Bp);
\draw[line width=1pt,blue!80] (Cp) -- (Ap);
\draw[dashed,line width=1pt] (C) -- ($(C)!2!(O)$);
% Codage égalité de longueur
\draw[line width=0.75pt] ($($(C)!0.47!(O)$)!0.15cm!90:(O)$) -- ($($(C)!0.47!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(C)!0.5!(O)$)!0.15cm!90:(O)$) -- ($($(C)!0.5!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(C)!0.53!(O)$)!0.15cm!90:(O)$) -- ($($(C)!0.53!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(Cp)!0.47!(O)$)!0.15cm!90:(O)$) -- ($($(Cp)!0.47!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(Cp)!0.5!(O)$)!0.15cm!90:(O)$) -- ($($(Cp)!0.5!(O)$)!0.15cm!-90:(O)$);
\draw[line width=0.75pt] ($($(Cp)!0.53!(O)$)!0.15cm!90:(O)$) -- ($($(Cp)!0.53!(O)$)!0.15cm!-90:(O)$);
\tkzRegle[Largeur=1.25,Longueur=6.5,Couleur=gray,Rotation=0,Origine={(-3,-0.025)},AfficheValeurs=false]
\tkzCrayon[Origine={Cp},Echelle=0.75,Longueur=2,Rotation=-30,Couleur=black]
\end{tikzpicture}
On construit le point $C'$,
symétrique du point $C$ par
rapport à $O$. On trace le
segment $[A'C']$. \medskip
\end{minipage}
\end{minipage}
\end{document}
Dans le code, les points sont définis par des coordonnées cartésiennes. Voici comment nous calculons les coordonnées d’un point après une rotation autour d’un autre point. Par exemple, pour le point P
, qui est le résultat de la rotation du point B
autour de O
:
\coordinate (P) at ({cos(10)*(3) - sin(10)*(-3)},{sin(10)*(+3) + cos(10)*(-3)});
Ce calcul utilise les formules de rotation en coordonnées cartésiennes :
où \(\theta\) est l’angle de rotation, et \((x{,} y)\) sont les coordonnées initiales du point.
Les arcs de cercles rouges sont tracés en utilisant des commandes TikZ pour les arcs. Voici un exemple :
\draw[red,line width=1pt] (Ap) arc[start angle={atan2(\Apy,\Apx)}, end angle={atan2(sin(25)*\Apx + cos(25)*\Apy,cos(25)*\Apx - sin(25)*\Apy)}, radius={sqrt(\Apx*\Apx + \Apy*\Apy)}];
Cette commande utilise plusieurs fonctions TikZ :
atan2(y, x)
calcule l’angle en radians entre le point \((x{,} y)\) et l’axe des abscisses.sin(\theta)
et cos(\theta)
sont utilisés pour les transformations de rotation.sqrt(x^2 + y^2)
calcule la distance entre le point et l’origine, qui est le rayon de l’arc.Les angles de début et de fin de l’arc sont définis dynamiquement en fonction des coordonnées des points pour garantir que l’arc est tracé correctement entre les points spécifiés.
Le paquet OutilsGeomTikz permet également de dessiner des outils géométriques comme le compas et la règle. Par exemple, pour dessiner un compas :
\tkzCompas[LongueurBranches=4,LongueurCrayon=2,CouleurCrayon=red]{O}{P}
Cette commande dessine un compas avec :
LongueurBranches
définissant la longueur des branches du compas.LongueurCrayon
définissant la longueur du crayon.CouleurCrayon
définissant la couleur du crayon.{O}{P}
spécifiant que le compas est centré en O
et passe par le point P
.Pour la règle :
\tkzRegle[Largeur=1.25,Longueur=7,Couleur=gray,Rotation=0,Origine={(-3,-0.025)},AfficheValeurs=false]
Cette commande dessine une règle avec :
Largeur
définissant la largeur de la règle.Longueur
définissant la longueur de la règle.Couleur
définissant la couleur de la règle.Rotation
définissant l’angle de rotation de la règle.Origine
définissant le point d’origine de la règle.AfficheValeurs
définissant si les valeurs (graduations) sont affichées ou non.Merci à Cédric Pierquet pour le paquet OutilsGeomTikz et les nombreux autres paquets qu’il développe et maintient ! 👍
J’utilise ces codes dans mes supports de cours que vous pouvez retrouver dans le projet La TeXiothèque de #LaForgeEdu.