Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

02 Apr '14, 20:45

cfeuersaenger's gravatar image

cfeuersaenger
3.7k23

`pgfplots` kommt mit der `fillbetween` library, die eigentlich fuer plots gedacht ist, aber auch ein `tikz` interface hat. Aktuell muss man dazu `pgfplots` laden (vielleicht faellt das irgendwann weg). Die Idee ist, dass man `intersection segments` angibt, und damit paarweise segmente verbindet. Der grosse Vorteil dieses Ansatzes: die Komplexitaet der Schnittpunktsberechnung und der Berechnung der Pfade dazwischen wird von `fillbetween` erledigt; man muss nur noch sagen, welche schnittsegmente man in welcher Reihenfolge konkatenieren will. Da hier drei Pfade beteiligt sind, sind und `fillbetween` immer nur zwei kombinieren kann, muss man das Schrittweise machen: \documentclass[margin=5mm,tikz]{standalone} \usetikzlibrary{intersections} \usepackage{pgfplots} \usepgfplotslibrary{fillbetween} \begin{document} \begin{tikzpicture} \pgfdeclarelayer{pre main} \pgfsetlayers{pre main,main} \draw [red,name path=line1] (1,1) .. controls (3,4) .. (10,5) ; \draw [green,name path=line2] (2,5) .. controls (6,5) .. (10,1) ; \draw [name path=line3] (1,2) .. controls (3,3) and (7,0) .. (9,2) ..controls (10,3.5) .. (10,3.5) ; \path [%draw,line width=3,blue, name path=1and3, intersection segments={ of=line1 and line3, sequence={A1[reverse] -- B1} }]; \pgfonlayer{pre main} \fill [ blue!40!white, intersection segments={ of=1and3 and line2, sequence={A1 -- B1[reverse]}, } ]; \endpgfonlayer \end{tikzpicture} \end{document} ![alt text][1] Der key `intersection segments` erwartet notwendig `of=pfad1 and pfad2` und `sequence`. Zweiteres ist das interessante: Man kann darin die segmente des ersten Pfads mit `A<index>` verwenden, wobei `<index>=0,1,...,n` oder `*` ist. Dasselbe geht mit den den segmenten des zweiten Pfads, der dann nicht mit `A` sondern mit `B<index>` referenziert wird. Hinter jedes Segment kann man die Option `reverse` angeben, also heisst `A1[reverse]` soviel wie "nehme das zweite segment (index 1) vom ersten Pfad (A) und drehe die Reihenfolge um". Mit `\path ... ;` habe ich einen Pfad gemacht, der _nicht_ gezeichnet wird - er ist nur ein zwischenstueck. Die layers dienen dazu, den fill path unter die anderen zu packen. [1]: http://texwelt.de/wissen/upfiles/P_2.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

01 Apr '14, 20:58

cfeuersaenger's gravatar image

cfeuersaenger
3.7k23

`pgfplots` kommt mit der `fillbetween` library, die eigentlich fuer plots gedacht ist, aber auch ein `tikz` interface hat. Aktuell muss man dazu `pgfplots` laden (vielleicht faellt das irgendwann weg). Die Idee ist, dass man `intersection segments` angibt, und damit paarweise segmente verbindet. Da hier drei Pfade beteiligt sind, muss man das Schrittweise machen: \documentclass[margin=5mm,tikz]{standalone} \usetikzlibrary{intersections} \usepackage{pgfplots} \usepgfplotslibrary{fillbetween} \begin{document} \begin{tikzpicture} \pgfdeclarelayer{pre main} \pgfsetlayers{pre main,main} \draw [red,name path=line1] (1,1) .. controls (3,4) .. (10,5) ; \draw [green,name path=line2] (2,5) .. controls (6,5) .. (10,1) ; \draw [name path=line3] (1,2) .. controls (3,3) and (7,0) .. (9,2) ..controls (10,3.5) .. (10,3.5) ; \path [%draw,line width=3,blue, name path=1and3, intersection segments={ of=line1 and line3, sequence={A1[reverse] -- B1} }]; \pgfonlayer{pre main} \fill [ blue!40!white, intersection segments={ of=1and3 and line2, sequence={A1 -- B1[reverse]}, } ]; \endpgfonlayer \end{tikzpicture} \end{document} ![alt text][1] Der key `intersection segments` erwartet notwendig `of=pfad1 and pfad2` und `sequence`. Zweiteres ist das interessante: Man kann darin die segmente des ersten Pfads mit `A<index>` verwenden, wobei `<index>=0,1,...,n` oder `*` ist. Dasselbe geht mit den den segmenten des zweiten Pfads, der dann nicht mit `A` sondern mit `B<index>` referenziert wird. Hinter jedes Segment kann man die Option `reverse` angeben, also heisst `A1[reverse]` soviel wie "nehme das zweite segment (index 1) vom ersten Pfad (A) und drehe die Reihenfolge um". Mit `\path ... ;` habe ich einen Pfad gemacht, der _nicht_ gezeichnet wird - er ist nur ein zwischenstueck. Die layers dienen dazu, den fill path unter die anderen zu packen. [1]: http://texwelt.de/wissen/upfiles/P_2.png

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×