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?

alt text

gefragt 24 Dez '15, 13:23

Sean1978's gravatar image

Sean1978
4112
Akzeptiert-Rate: 0%

bearbeitet 25 Dez '15, 02:05

esdd's gravatar image

esdd
17.8k284257

Prinzipiell mit der intersections-Bibliothek für tikz 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.

(24 Dez '15, 14:52) saputello

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?

(24 Dez '15, 16:23) Sean1978

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

(24 Dez '15, 17:12) Sean1978

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.

(24 Dez '15, 17:25) saputello

Du darfst Deine gefundene Lösung auch gerne als Antwort auf Deine eigene Frage posten. Das ist hier ausdrücklich erwünscht!

(24 Dez '15, 17:28) saputello

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:

alt text

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 intersection segments={of=b and r,sequence={L2}} verwenden. Dabei werden die Schnittpunkte zwischen den beiden Pfaden b und r ermittelt. Diese Schnittpunkte werden anschließend verwendet, um die Pfade in Segmente aufzuteilen. Dabei werden die Segmente des ersten Pfades mit dem Buchstaben L und die des zweiten mir R bezeichnet. Hinter dem Buchstaben steht dann noch die Nummer des Segmentes. Der oben orange eingezeichnete Teil ist das zweite Segment des ersten Pfades und heißt deshalb L2.

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

alt text

Wenn ich es richtig mitbekommen habe, möchtest Du aber eigentlich so etwas haben wie

alt text

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 R1 das erste Segment von r ist, L2 wieder das zweite von b und R3 das dritte von r.

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}
Permanenter link

beantwortet 25 Dez '15, 03:14

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

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: alt text

Permanenter link

beantwortet 24 Dez '15, 22:30

Sean1978's gravatar image

Sean1978
4112
Akzeptiert-Rate: 0%

bearbeitet 25 Dez '15, 02:20

esdd's gravatar image

esdd
17.8k284257

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×298

gestellte Frage: 24 Dez '15, 13:23

Frage wurde gesehen: 8,536 Mal

zuletzt geändert: 25 Dez '15, 03:14