Ich habe mehrere Linien in einem Diagramm erstellt. Wie kann ich jetzt die Schnittpunkte finden lassen (müssen nicht markiert werden) um diese dann als Grundlage für einen neuen Plot zu benutzen? Das Ziel ist eine einhüllende zu generieren und diese dann mit einer Farbe zu füllen (das krieg ich inzwischen hin). Hier mein Beispiel: Open in Online-Editor
\documentclass{scrreprt} \usepackage{pgfplots} \pgfplotsset{compat=1.12} \begin{document} \begin{tikzpicture} \centering \begin{axis} [ width=15cm, title=V-n, xlabel={equivalent Airspeed [kts]}, ylabel={Load Factor}, ymin=0, ymax=5, xmin=0, xmax=100 ] \addplot [blue,domain=0:100]{(1.2*1.225*23)/(2*2525.15*9.81)*x^2}; \addplot [red] coordinates{(0,4.4)(330,4.4)}; \addplot [dashed]coordinates {(74.41,0)(74.41,6)}node[pos=0.15,right]{$V_S$}; \end{axis} \end{tikzpicture} \end{document} Mein ziel ist es, die Schnittpunkte zwischen der Kurve und der roten Linie sowie der kurve und der gestrichelten Linie zu finden und zwischen den beiden Punkten, entlang der Kurve, eine neue Linie zu plotten. Geht das überhaupt? |
Hier meine Lösung. Open in Online-Editor
\documentclass[12pt,titlepage,footsepline,headsepline]{scrreprt} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} \usepackage{color} \usepackage[a4paper,lmargin={4cm},rmargin={2.5cm},tmargin={3cm},bmargin={3cm}]{geometry} \usepackage{pgfplots} \usetikzlibrary{intersections} \usepgfplotslibrary{fillbetween} \pgfplotsset{compat=1.12} \begin{document} \begin{tikzpicture} \centering \begin{axis} [ width=15cm, title=V-n-Manöverdiagramm, xlabel={equivalent Airspeed [kts]}, ylabel={Load Factor}, ymin=-3, ymax=5, xmin=0, xmax=330, transpose legend, legend columns=2, legend cell align=left, legend entries={ pos. Lift, neg.Lift, max. Load (+/-)}, legend style={at={(0.5,-0.15)},anchor=north}, ] %Hier werden die Linien gezeichnet und mit Namen versehen \addplot [name path=b,blue,domain=0:100]{(1.2*1.225*23)/(2*2525.15*9.81)*x^2}; \addplot [name path=c,cyan,domain=0:100]{-(0.9*1.225*23)/(2*2523.15*9.81)*x^2}; \addplot [name path=ro,red] coordinates{(0,4.4)(330,4.4)}; \addplot [name path=ru,red] coordinates{(0,-1.76)(330,-1.76)}; \addplot [name path=vs,dashed]coordinates {(74.41,-4)(74.41,6)}node[pos=0.15,right]{$V_S$}; \addplot [name path=vd,dashed]coordinates{(232.47,-4)(232.47,6)}node[pos=0.15,right]{$V_D$}; \addplot [solid]coordinates{(0,0)(330,0)}; %Jetzt werden die Schnittpunkte berechnet und als Koordinaten verwurstet \path [name intersections={of=b and vs}]; \coordinate (bvs) at (intersection-1); \path [name intersections={of=b and ro}]; \coordinate (bro) at (intersection-1); \path [name intersections={of=ro and vd}]; \coordinate (rovd) at (intersection-1); \path [name intersections={of=vd and ru}]; \coordinate (vdru) at (intersection-1); \path [name intersections={of=vs and ru}]; \coordinate (vsru) at (intersection-1); %Zuletzt wird die Einhüllende gezeichnet und dann gefüllt \draw [fill,blue,opacity=0.5](bvs) -- (bro) -- (rovd) -- (vdru) -- (vsru) -- (bvs); \end{axis} \end{tikzpicture} \end{document} Das ganze sieht dann so aus: |
Ich verwende im folgenden ein anderes Beispiel bei dem deutlicher wird, bei dem der Ausgangsplot in dem betroffenen Bereich nicht so einfach durch eine Gerade angenähert werden kann. Dafür lasse ich alles für das Problem nicht wichtige weg: Open in Online-Editor
\documentclass[margin=5pt]{standalone} \usepackage{pgfplots} \usepgfplotslibrary{fillbetween} \pgfplotsset{compat=1.12} \begin{document} \begin{tikzpicture} \begin{axis} [ ymin=-1, ymax=4, xmin=0, xmax=4 ] \addplot[name path=b,blue,domain=0:4]{(x/2)^2}; \draw (current axis.left of origin)--(current axis.right of origin); \draw [red] foreach \y/\name in {-.5/unten,2/oben} {(0,\y-|current axis.west)-- (0,\y-|current axis.east)coordinate(\name)}; \draw [dashed] foreach \x/\t/\name in {1.5/S/links,3.5/D/rechts} {(\x,0|-current axis.south)-- (\x,0|-current axis.north)node[pos=.05,right]{$V_\t$}coordinate(\name)}; \end{axis} \end{tikzpicture} \end{document} Wenn ich Dich richtig verstehe, dann hättest Du gern das in der folgenden Zeichnung orange Stücke des Plots, dass zwischen den Schnittpunkten des Plots mit der grünen Linie liegt: Die grüne Linie entspricht dem Pfad Open in Online-Editor
\path[name path=r](unten-|links)--(oben-|links)--(oben-|rechts); den ich auch gleich benannt habe. Um das Stück zwischen den Schnittpunkten dieses Pfades mit dem Plot zu markieren, lässt sich Open in Online-Editor
\documentclass[margin=5pt]{standalone} \usepackage{pgfplots} \usepgfplotslibrary{fillbetween} \pgfplotsset{compat=1.12} \begin{document} \begin{tikzpicture} \begin{axis} [ ymin=-1, ymax=4, xmin=0, xmax=4 ] \addplot[name path=b,blue,domain=0:4]{(x/2)^2}; \draw (current axis.left of origin)--(current axis.right of origin); \draw [red] foreach \y/\name in {-.5/unten,2/oben} {(0,\y-|current axis.west)-- (0,\y-|current axis.east)coordinate(\name)}; \draw [dashed] foreach \x/\t/\name in {1.5/S/links,3.5/D/rechts} {(\x,0|-current axis.south)-- (\x,0|-current axis.north)node[pos=.05,right]{$V_\t$}coordinate(\name)}; \path[name path=r](unten-|links)--(oben-|links)--(oben-|rechts); \draw[orange,thick, intersection segments={of=b and r,sequence={L2}} ]; \end{axis} \end{tikzpicture} \end{document} liefert Wenn ich es richtig mitbekommen habe, möchtest Du aber eigentlich so etwas haben wie Dafür kannst Du dann Open in Online-Editor
\fill[blue,opacity=.25, intersection segments={of=b and r,sequence={R1--L2--R3}} ]--(unten-|rechts)--cycle; nutzen, wobei Code: Open in Online-Editor
\documentclass[margin=5pt]{standalone} \usepackage{pgfplots} \usepgfplotslibrary{fillbetween} \pgfplotsset{compat=1.12} \begin{document} \begin{tikzpicture} \begin{axis} [ ymin=-1, ymax=4, xmin=0, xmax=4 ] \addplot[name path=b,blue,domain=0:4]{(x/2)^2}; \draw (current axis.left of origin)--(current axis.right of origin); \draw [red] foreach \y/\name in {-.5/unten,2/oben} {(0,\y-|current axis.west)-- (0,\y-|current axis.east)coordinate(\name)}; \draw [dashed] foreach \x/\t/\name in {1.5/S/links,3.5/D/rechts} {(\x,0|-current axis.south)-- (\x,0|-current axis.north)node[pos=.05,right]{$V_\t$}coordinate(\name)}; \path[name path=r](unten-|links)--(oben-|links)--(oben-|rechts); \fill[blue,opacity=.25, intersection segments={of=b and r,sequence={R1--L2--R3}} ]--(unten-|rechts)--cycle; \end{axis} \end{tikzpicture} \end{document} beantwortet 25 Dez '15, 03:14 esdd |
Prinzipiell mit der
intersections
-Bibliothek fürtikz
wie in der Antwort auf "TikZ Kurve durch Schnittpunkte zeichnen" gezeigt. Man kan die Punkte dann verwendet, um sie zu markieren oder davon ausgehend neue Kurven zeichnet oder ihnen irgendwelche Namen geben.Im Prinzip ist das genau was ich brauche... Kennt nur jemand evtl. ein Beispiel welches mehr zu meinem passt? Ich komme damit gar nicht klar irgendwie. Oder kennt vielleicht jemand so etwas wie ein Handbuch?
Ok, habe dann doch noch selber gefunden und verstanden. Für alle die vor dem selben Problem stehen, dieser link hat mir weiter geholfen: link text
Ich habe Deine "Antworten" in Kommentare umgewandelt. Hier sind Antworten stets "echte" Antworten, keine Gespräche oder Rückfragen oder Zusatzinfos, sondern Lösungen. Das verbessert die Übersicht erheblich für die Archivierung der Lösungen. Ungewohnt und anders als in Webforen, doch innovativ und nutzbarer. Bemerkungen gern wie hier als Kommentare. Außerdem habe ich noch die Markdown-Syntax in Deiner Frage korrigiert. Bitte stets Markdown statt HTML-Tags verwenden. Dann funktionieren auch die Backslashs und im Idealfall sogar der Online-Editor-Link.
Du darfst Deine gefundene Lösung auch gerne als Antwort auf Deine eigene Frage posten. Das ist hier ausdrücklich erwünscht!