PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Komischer Effekt bei intersections bei tikZ



Hobbykomiker
20-11-2013, 12:58
Hallo,

ich habe ein (mehr oder weniger gelöstes) Problem mit der Schnittpunktsberechnung in tikZ.
Erstmal ein kleines (heruntergekochtes) Beispiel vorab:


\documentclass[ utf8, %
12pt, %
xcolor={tables,x11names,svgnames} %,
] %
{beamer}

\usepackage{tikz}
\begin{document}
\usetikzlibrary{intersections}
\begin{tikzpicture}
\path[draw,name path=Rand] (0,0) -- (1,0) -- (2,1) -- (2,2) -- (0,2) --cycle ;
\foreach \Linie in {.1,.3,...,1.9} {
\path[draw,name path=linie,very thin] (\Linie,-1) -- (\Linie,3) ;
\path[name intersections={of=Rand and linie}] ;
\path[fill=black] (intersection-1) circle (.1) ;
\path[fill=red] (intersection-2) circle (.05) ;
} ;
\end{tikzpicture}
\end{document}


Wenn Ihr das Beispiel ausführt, sollten die kleinen roten Kreise (bis auf den ersten) an der falschen Position sein (bei mir ist es jedenfalls so).
Mit anderen Worten (intersection-1) und (intersection-2) sind gleich.

Tauscht man in der Zeile mit


\path[name intersections={of=Rand and linie}] ;

'Rand' und 'linie', also


\path[name intersections={of=linie and Rand}] ;

funktioniert es (bei mir) wie erwartet.

Meine Frage: Habe ich das falsch angewendet, ist das so gewollt oder handelt
es sich - wider Erwarten - um einen Fehler?

Thorsten

esdd
20-11-2013, 19:38
Wahrscheinlich ist das wirklich ein Fehler in der Version, die aktuell in Miktex verfügbar ist. In Texlive ist es vermutlich die gleiche. Mit


\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}

\begin{tikzpicture}
\path[draw,name path=Rand] (0,0) -- (1,0) -- (2,1) -- (2,2) -- (0,2) --cycle ;
%
\foreach[count=\i] \x in {0.1,0.3,...,1.9}{
\draw[name path=linie\i](\x,-1)--+(0,4);
\path[name intersections={of=Rand and {linie\i}}] ;
\path[fill=black] (intersection-1) circle (.1) ;
\path[fill=red] (intersection-2) circle (.05) ;
%\path[fill=blue] (intersection-3) circle (.04);
%\path[fill=yellow] (intersection-4) circle (.02);
} ;
\end{tikzpicture}
\end{document}

bekomme ich auch das von dir beschriebene Ergebniss. Kommentiert man die beiden Zeilen noch mit ein, dann sieht man, dass ab der 2.Linie jeweils 4 Schnittpunkte gefunden werden. Welche Nummer die einzelnen Punkte haben, hängt von der Reihenfolge ab, in der sie gefunden werden. Deshalb ändert sich das Ergebnis, wenn man Rand und {linie\i} vertauscht.

Lässt man obigen Code mit der aktuellen CVS Version laufen, dann werden dagegen nur jeweils zwei Schnittpunkte gefunden und die Zeichnung wird erwartungsgemäß erstellt.

Mit beiden Versionen funktioniert auch das folgende wie erwartet:


\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}

\begin{tikzpicture}
\path[draw,name path=Rand] (0,0) -- (1,0) -- (2,1) -- (2,2) -- (0,2) --cycle ;
\path[draw,name path=linie,very thin,name path=linie1](0.1,-1) -- +(0,4);
\path[draw,name path=linie,very thin,name path=linie2](0.3,-1) -- +(0,4);
\path[draw,name path=linie,very thin,name path=linie3](0.5,-1) -- +(0,4);
\path[draw,name path=linie,very thin,name path=linie4](0.7,-1) -- +(0,4);
\foreach \i in {1,...,4} {
\path[name intersections={of=Rand and {linie\i}}] ;
\path[fill=black] (intersection-1) circle (.1) ;
\path[fill=red] (intersection-2) circle (.05) ;
} ;
\end{tikzpicture}
\end{document}

Gruß
Elke

Hobbykomiker
21-11-2013, 09:03
Herzlichen Dank für die Antwort, auch wenn sie mir für meine eigentliche Anwendung nicht richtig weiter hilft.

Allerdings hätte ich noch eine Frage: Was bedeutet

Lässt man obigen Code mit der aktuellen CVS Version laufen?

CVS sagt mir nur etwas als Versionskontrolltool und wirklich angewendet habe ich es bisher nicht.

Thorsten

esdd
21-11-2013, 09:24
Das bezieht sich auf die Entwicklerversionen. Die aktuelle findest du hier (http://pgf.sourceforge.net/). Aber die ist natürlich nur mit Vorsicht zu verwenden, da unstable.

Gruß
Elke