pgfplots, intersections, Geradengleichung

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: pgfplots, intersections, Geradengleichung

von jensjj » Do 22. Jun 2017, 08:20

Super esdd! Vielen Dank - auch für den Hinweis auf die Skalierung/Einheit ist für mich hilfreich, da ich mit den Daten rechne und z. B. Start- bzw. Endpunkte anderer, hiervon abhängiger Funktionen bestimme.

Dein Vorgehen zeigt mir durch den Lösungsweg auch, wie ich aus einer Koordinaten den x- und y-Anteil ermittle. Auch das wird mir an anderer Stelle sicher noch helfen. Also, nochmals vielen Dank!

Leider verrätst Du nicht, was Du mit Steigung und Achsenabschnitt dann tun willtst.
Ich hatte versucht, das Minimalbeispiel auf mein Problem zu reduzieren. Vieleicht sieht es deswegen etwas wirr aus.
Ich erstelle ein Arbeitsdiagramm für eine Destillationsanlage. Die Arbeitspunkte der Anlage liegen auf solchen konstruierten Geraden, deren Anfangs- und Endpunkte wiederum Schnittpunkte anderer Funktionen sind.
Mit Steigung und Achsenabschnitt fällt es deutlich leichter, Betriebspunkte auf diesen Geraden einzuzeichnen.

von esdd » Mi 21. Jun 2017, 20:56

Leider verrätst Du nicht, was Du mit Steigung und Achsenabschnitt dann tun willtst.
\documentclass{standalone} 
\usepackage[utf8]{inputenc} 
\usepackage{pgfplots} 
\pgfplotsset{compat=newest}
\usetikzlibrary{math, calc, intersections} 
\begin{document} 
\begin{tikzpicture} 
   \begin{axis}[ 
   domain=0:1,
   height=9cm, 
   width=9cm, 
   xlabel={$x_A$}, 
   ylabel={$y_A$}, 
   grid=major, 
   clip=false, 
   xmin=0, xmax=1, 
   ymin=0, ymax=1 
   ] 
   \addplot[mark=none, name path=A]{3.5*x/(1+2.5*x)}; 
   \addplot[green!50!black, mark=none, name path=B]{0.6876*x+0.19875}; 
   \draw[blue, mark=none, name path=C](0.9,0) -- +(0,0.9); 
   \draw[green, mark=none, name path=D](0.3,0) -- +(0,0.7); 
   \path [name intersections={of=A and D,by=P1}]; 
   \draw [red] (P1) circle[radius=2pt] node [xshift=10pt] {\footnotesize {P1}}; 
   \path [name intersections={of=B and C,by=P2}]; 
   \draw [red] (P2) circle[radius=2pt] node [xshift=10pt] {\footnotesize {P2}}; 
   \draw[red](P1) -- (P2)\pgfextra{\pgfgetlastxy{\xii}{\yii}};
   \path let \p1=(P1), \p2=(P2) in \pgfextra{%
      \pgfmathparse{(\y2-\y1)/(\x2-\x1)} \xdef\steigung{\pgfmathresult}%
      \pgfmathparse{\y1-\steigung*\x1} \xdef\achsenabschnitt{\pgfmathresult}%
   };
   \draw[yellow](0pt,\achsenabschnitt pt)--(P1);
   \draw[yellow](P2)--(210.5pt,210.5pt*\steigung+\achsenabschnitt pt);
\end{axis}
\node[below]at(current axis.outer south){Steigung: \steigung, Achsenabschnitt: {\achsenabschnitt} pt};
\end{tikzpicture} 
\end{document}
Bild

Beachte dabei, dass \achsenabschnitt hier den Abstand des Schnittpunktes der Geraden mit der y-Achse vom Nullpunkt in pt angibt. Das hat also nichts mit den Einheiten zu tun, die an der Skale stehen. Ähnliches gilt für den Anstieg. Der enspricht nur dem Anstieg in der Geradengleichung, wenn eine y-Einheit genau so lang wie eine x-Einheit ist.

Wenn Du den Achsenabschnitt umrechnen möchtest, dann gib einen Wert für die x- und y-Einheiten vor:
\documentclass{standalone} 
\usepackage[utf8]{inputenc} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.14}
\usetikzlibrary{math, calc, intersections} 
\pgfplotsset{compat=newest} 
\begin{document} 
\begin{tikzpicture} 
   \newcommand*\plotunit{7.5cm}
   \begin{axis}[ 
   domain=0:1,
   x=\plotunit,
   y=\plotunit,
   xlabel={$x_A$}, 
   ylabel={$y_A$}, 
   grid=major, 
   clip=false, 
   xmin=0, xmax=1, 
   ymin=0, ymax=1 
   ] 
   \addplot[mark=none, name path=A]{3.5*x/(1+2.5*x)}; 
   \addplot[green!50!black, mark=none, name path=B]{0.6876*x+0.19875}; 
   \draw[blue, mark=none, name path=C](0.9,0) -- +(0,0.9); 
   \draw[green, mark=none, name path=D](0.3,0) -- +(0,0.7); 
   \path [name intersections={of=A and D,by=P1}]; 
   \draw [red] (P1) circle[radius=2pt] node [xshift=10pt] {\footnotesize {P1}}; 
   \path [name intersections={of=B and C,by=P2}]; 
   \draw [red] (P2) circle[radius=2pt] node [xshift=10pt] {\footnotesize {P2}}; 
   \draw[red](P1) -- (P2)\pgfextra{\pgfgetlastxy{\xii}{\yii}};
   \path let \p1=(P1), \p2=(P2) in \pgfextra{%
      \pgfmathparse{(\y2-\y1)/(\x2-\x1)} \xdef\steigung{\pgfmathresult}%
      \pgfmathparse{(\y1-\steigung*\x1)/\plotunit} \xdef\achsenabschnitt{\pgfmathresult}%
   };
   \draw[yellow](0pt,\achsenabschnitt)--(P1);
   \draw[yellow](P2)--(1,\steigung+\achsenabschnitt);
\end{axis}
\node[below]at(current axis.outer south){Steigung: \steigung, Achsenabschnitt: \achsenabschnitt};
\end{tikzpicture} 
\end{document}
Bild
Dateianhänge
gl_geradengleichung1.png
gl_geradengleichung1.png (17.97 KiB) 1341 mal betrachtet
gl_geradengleichung2.png
gl_geradengleichung2.png (17.89 KiB) 1332 mal betrachtet

pgfplots, intersections, Geradengleichung

von jensjj » Mi 21. Jun 2017, 16:53

Hallo aus dem hohen Norden,

ich suche nach einer Möglichkeit, Steigung und Achsenabschnitt einer Geraden, die zwei intern berechente Koordinaten (berechnet über "intersections") verbindet, zu berechnen.
Alternativ käme ich auch weiter, wenn ich die x- und y-Werte aus den Koordinaten herausextrahieren könnte. Es geht mir in dem Minimalbeispiel um die rote Gerade zwischen den Koordinaten P1 und P2, also um eine Lösung, die auf diesen Koordinaten basiert. Ich hoffe, ich habe bei meiner Suche nicht die offensichtliche Lösung übersehen. Dann wäre ich für einen Hinweis sehr dankbar.


\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\usetikzlibrary{math, calc, intersections}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
	\begin{axis}[
	domain=0:1,
	height=9cm,
	width=9cm,
	xlabel={$x_A$},
	ylabel={$y_A$},
	grid=major,
	clip=false,
	xmin=0, xmax=1,
	ymin=0, ymax=1
	]
	\addplot[mark=none, name path=A]{3.5*x/(1+2.5*x)};
	\addplot[green!50!black, mark=none, name path=B]{0.6876*x+0.19875};
	\draw[blue, mark=none, name path=C](0.9,0) -- +(0,0.9);
	\draw[green, mark=none, name path=D](0.3,0) -- +(0,0.7);
	\path [name intersections={of=A and D,by=P1}];
	\draw [red] (P1) circle[radius=2pt] node [xshift=10pt] {\footnotesize {P1}};
	\path [name intersections={of=B and C,by=P2}];
	\draw [red] (P2) circle[radius=2pt] node [xshift=10pt] {\footnotesize {P2}};
	\draw[red](P1) -- (P2);
\end{axis}
\end{tikzpicture}
\end{document}
Vielen Dank!
Dateianhänge
Minimalbild_Steigung.pdf
(35.04 KiB) 225-mal heruntergeladen

Nach oben