Je cherche les intersections de deux chemins avec la bibliothèque intersections

Ouvrir dans l'éditeur Overleaf
\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}
    \begin{tikzpicture}        
    \draw[help lines] (-3,-3) grid (3,3); % grille   me path=droite
    \draw[name path = droite] (-3,-3) --+ (6,4);
    \draw[name path=rectangle] (-2,-2) rectangle (2,2) ;
    \fill [name intersections={of=droite and rectangle, name=i, total=\t}]
    [red, opacity=0.5, every node/.style={above left, black, opacity=1}]
    \foreach \s in {1,...,\t}{(i-\s) circle (2pt) node {\footnotesize\s}};
    \end{tikzpicture}
\end{document}

Ici cela fonctionne bien.

alt text

Même chose en définissant la droite qui coupe le rectangle avec edge, et cela ne fonctionne plus.

Ouvrir dans l'éditeur Overleaf
\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\begin{document}
    \begin{tikzpicture}        
    \draw[help lines] (-3,-3) grid (3,3); % grille   me path=droite
    \draw[name path = droite] (-3,-3) edge+ (6,4);
    \draw[name path=rectangle] (-2,-2) rectangle (2,2) ;
    \fill [name intersections={of=droite and rectangle, name=i, total=\t}]
    [red, opacity=0.5, every node/.style={above left, black, opacity=1}]
    \foreach \s in {1,...,\t}{(i-\s) circle (2pt) node {\footnotesize\s}};
    \end{tikzpicture}
\end{document}
  • Package pgf Error: No shape named i-1 is known. ...i-s) circle (2pt) node {footnotesizes}}
  • Package pgf Error: No shape named i-0 is known. ...i-s) circle (2pt) node {footnotesizes}}

On dirait qu'il trouve bien deux intersections i-1 et i-0 mais qu'il ne sait plus les utiliser

Pourquoi cela ne fonctionne-t-il pas en définissant un des chemins avec edge et peut-on faire en sorte que cela fonctionne malgré tout ?

Posée 26 Aoû '20, 00:39

idefix's gravatar image

idefix
95594051
Taux d'acceptation : 14%

Modifiée 27 Aoû '20, 10:48

Pathe's gravatar image

Pathe ♦♦
7.5k40201251

2

Si j'ai bien compris, avec (-3,-3) edge+ (6,4) il y a deux chemines : le chemine (principale) nommé droite, qui n'est rien d'autre que le point (-3,-3) et la ligne droite (-3,-3) --+ (6,4). Comme il n' y pas d'intersection entre droite=(-3,3) et le rectangle (-2,-2) rectangle (2,2) alors il n y a pas des points à définir et \t=0.

(26 Aoû '20, 09:14) touhami touhami's gravatar image

Le chemin droite est constitué du point (-3,3) et de la droite qui part de (-3,-3) jusqu'à (-3+6,-3+4). Si l'intersection se fait entre les chemins, la droite coupe bien le rectangle même si la position est toujours (-3,-3) à la fin du chemin droite à cause de edge. Je suis un peu surpris qu'il ne considère que le point (-3,-3) pour le chemin droite.

(26 Aoû '20, 12:15) idefix idefix's gravatar image
3

Essayer de (re)lire les 3 premières lignes à la page 258 de la doc.

(26 Aoû '20, 12:57) touhami touhami's gravatar image

Merci touhami pour la solution. L'opération de chemin edge (comme l'opération node) est traitée après à la fin du chemin principal (post process comme on dit). Cette opération edge crée un nouveau chemin et c'est donc ce chemin créé par edge qu'il faut nommer pour l'intersection. edge[name path=droite] et non pas le chemin principal.

Ouvrir dans l'éditeur Overleaf
\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}
    \begin{tikzpicture}        
    \draw[help lines] (-3,-3) grid (3,3); % grille   me path=droite
    \draw[] (-3,-3) edge[name path= droite]+ (6,4);
    \draw[name path=rectangle] (-2,-2) rectangle (2,2) ;
    \fill [name intersections={of=droite and rectangle, name=i, total=\t}]
    [red, opacity=0.5, every node/.style={above left, black, opacity=1}]
    \foreach \s in {1,...,\t}{(i-\s) circle (2pt) node {\footnotesize\s}};
    \end{tikzpicture}
\end{document}

alt text

Lien permanent

Publiée 26 Aoû '20, 13:36

idefix's gravatar image

idefix
95594051
Taux d'acceptation : 14%

Modifiée 27 Aoû '20, 10:49

Pathe's gravatar image

Pathe ♦♦
7.5k40201251

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.