1
1

Je cherche une macro TikZ pour coder les angles droits lorsque les chemins ne sont pas droits (simulation de tracé à main levée) comme par exemple dans la figure ci-dessous.

L'idée étant de créer une macro qui permette de coder tous les angles droits, que ce soit deux droites perpendiculaires, les diagonales d'un losange, un triangle rectangle.

rectangle à main levée

J'ai déjà fait cela manuellement en codant des parallèles de chaque côté puis en calculant les points d'intersection angle droit par angle droit. Pour un rectangle, cela fait quatre parallèles à construire manuellement qui donnent 12 points d'intersection.

Édit : Une nouvelle idée : plutot que de construire les intersections avec des parallèles, je pense qu'il est plus simple de construire les intersections avec des cercle de rayon fixé (4 ou 5 mm par exemple) de centre le sommet de l'angle. Cela donne deux points d'intersection. Il suffit alors de construire le chemin de l'un à l'autre avec la syntaxe tikz |- ou -|

Édit n°2 : Non, on ne peut pas utiliser la syntaxe tikz |- ou -| car cette dernière trace des parallèles aux axes de la feuille.

Il doit être possible d'utiliser les vecteurs du package tkz-euclide pour obtenir le quatrième angle du symbole de l'angle droit.

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt]{article} 
\usepackage{tikz}               
\usetikzlibrary{intersections}

\begin{document}
\begin{tikzpicture}
\coordinate[label=right:A](A) at (4,0);
\coordinate[label=left:B](B) at (0,0);
\coordinate[label=left:C](C) at (0,3);
\coordinate[label=right:D](D) at (4,3);

\draw [name path=AB,bend left=-5] (A)to (B);
\draw[name path=BC,bend left=-5]  (B)to (C);
\draw[name path=CD,bend left=-5]  (C)to (D);
\draw[name path=DA,bend left=-5]  (D)to (A);
\end{tikzpicture}
\end{document}

Je voudrais automatiser cela sans utiliser le package tikz-euclide car ce dernier ne code vraiment bien que lorsque les chemins sont droits. Sinon, le codage coupe légèrement les côtés comme le montre l'exemple ci-dessous.

codage qui déborde

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt]{article} 
\usepackage{tikz}               
\usetikzlibrary{intersections} 
\usepackage{tkz-euclide}
\usetkzobj{all} 
\begin{document}
\begin{tikzpicture}
\coordinate[label=right:A](A) at (4,0);
\coordinate[label=left:B](B) at (0,0);
\coordinate[label=left:C](C) at (0,3);
\coordinate[label=right:D](D) at (4,3);

\draw [name path=AB,bend left=-5] (A)to (B);
\draw[name path=BC,bend left=-5]  (B)to (C);
\draw[name path=CD,bend left=-5]  (C)to (D);
\draw[name path=DA,bend left=-5]  (D)to (A);
\tkzMarkRightAngle(A,B,C)
\tkzMarkRightAngle(B,C,D)
\tkzMarkRightAngle(C,D,A)
\tkzMarkRightAngle(D,A,B)
\end{tikzpicture}
\end{document}

Posée 17 Aoû '17, 18:05

Andr%C3%A9C's gravatar image

AndréC
6111124
Taux d'acceptation : 25%

Modifiée 22 Aoû '17, 22:17

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Lors de l'excellent stage LaTeX de Dunkerque, j'avais assisté il y a quelques années à une intervention de Christophe Poulain intitulée Productivité avec LaTeX.

Professeur de mathématiques au collège, Christophe Poulain avait relaté, parmi tant d'autres exemples éclairants, son souci de fournir à ses élèves des figures géométriques impossibles à décalquer. Comme vous, il a généré des figures simulant un tracé à main levée. Je pense qu'il s'est servi de courbes de Bézier générées avec Metapost et non avec TikZ.

Ses travaux sont publiés sur l'excellent site Syracuse, qui est une mine d'informations. Je n'ai pas les références exactes des figures imitant la main levée, mais je ne saurais trop vous inviter à y jeter un œil.

(17 Aoû '17, 18:38) Pathe ♦♦ Pathe's gravatar image

Oui, il fait avec metapost, mais je ne crois pas qu'il code avec les angles droits des figures dessinées à main levée.

Edit : si il code les figures à main levée, mais cela veut dire apprendre un langage de plus !

(17 Aoû '17, 18:48) AndréC Andr%C3%A9C's gravatar image

@Pathe, en tant que super-admin, pouvez-vous appliquer la règle édictée par l'admin @denis précisant que lorsqu'on édite une réponse, on le signifie avec Édit afin que les commentaires suivants aient toujours un sens ?

Vous avez modifié votre premier commentaire plusieurs jours plus tard, cela rend mon commentaire vous répondant idiot et je n'ai pas la possibilité de modifier ce commentaire car je n'ai pas les pleins pouvoirs comme les super-admins.

(22 Aoû '17, 10:40) AndréC Andr%C3%A9C's gravatar image

voici une petite macro qui trace un coin

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt]{article} 
\usepackage{tikz}               
\usetikzlibrary{intersections,calc}

\begin{document}

 \newcommand{\coin}[4]{
 \path[name path=CAB] (#1) circle (#4);
\coordinate[red,name intersections={of=#2 and CAB,by=p#1-1 }];

\coordinate[red,name intersections={of=#3 and CAB,by=p#1-2 }];

\path (#1) -- (p#1-1) coordinate[pos=10] (ff) --(ff);  
\path (#1) -- (p#1-2) coordinate[pos=10] (ff) --(ff);

\path (#1) -- ($(p#1-1)!0.5!(p#1-2)$) coordinate[pos=2] (d#1);

 \draw[red] (p#1-1) -- (d#1) --(p#1-2);
 }

\begin{tikzpicture}
\coordinate[label=right:A](A) at (4,0);
\coordinate[label=left:B](B) at (0,0);
\coordinate[label=left:C](C) at (0,3);
\coordinate[label=right:D](D) at (4,3);

\draw [name path=AB,bend left=-5] (A)to (B);
\draw[name path=BC,bend left=-5]  (B)to (C);
\draw[name path=CD,bend left=-5]  (C)to (D);
\draw[name path=DA,bend left=-5]  (D)to (A);

\coin{A}{AB}{DA}{5mm} 
 \coin{D}{CD}{DA}{4mm}
  \coin{C}{CD}{BC}{3mm}
   \coin{B}{BC}{AB}{2mm}

\end{tikzpicture}

\end{document}

Je n'ai pas le droit de téléverser l'image!!

Lien permanent

Publiée 26 Aoû '17, 16:56

rpapa's gravatar image

rpapa
311
Taux d'acceptation : 0%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.