Fläche zwischen Funktionen einfärben

Tabellen und Grafiken erstellen und anordnen


maedsi94
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 22. Nov 2018, 19:48

Fläche zwischen Funktionen einfärben

Beitrag von maedsi94 »

Hallo zusammen,

ich will gerne die Fläche zwischen zwei Funktionen einfärben. Zum Zeichnen der Funktionen verwende ich das Paket tikz.

Ich habe bereits einige Foren durchforstet...mit mäßigem Erfolg. Mein aktueller Stand ist der folgende:
\documentclass{standalone} 

\usepackage{tikz}
\usetikzlibrary{calc,intersections}


\begin{document}
	\begin{tikzpicture}[every plot/.append style={samples=50}]
		\fill[lightgray!20] plot[domain=-2:2] (\x,{(\x)^2})
		-- plot[domain=2:-2] (\x,{-(\x)^2+4});
		\draw[name path=f, green!70!black, line width=0.7pt] plot[domain=-3:3] (\x,{(\x)^2})
		node[right] {$f$};
		\draw[name path=g, red!70!black, line width=0.7pt] plot[domain=-3:3] (\x,{-(\x)^2+4})
		node[right] {$g$};
		
		%markieren der Schnittpunkte 
		\fill[name intersections={of=f and g, by={A,B}}]
		(A)circle(2pt)
		(B)circle(2pt);
	\end{tikzpicture}
\end{document}


Dabei wird zwar die Fläche zwischen den Graphen eingefärbt, allerdings muss ich die Grenzen, in denen der Zwischenraum gefüllt wird, selbst eingeben (aktuell ist "zu viel" gefärbt). Dazu jetzt meine Frage(n):

Gibt es eine Möglichkeit die x-Koordinaten der berechneten Intersections auszulesen und in die domain einlesen zu lassen?
Gibt es eine elegantere Möglichkeit zu dem gewünschten Ergebnis zu gelangen?
Sind die Lösungen übertragbar auf andere Funktionen (zB Fläche zwischen Gerade und Parabel, etc.)?

Vielen Dank!

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Für das Füllen der Fläche könntest Du die Bibliothek fillbetween von pgfplots benutzen:
\documentclass{standalone}
\usepackage{pgfplots}% lädt tikz

\usepgfplotslibrary{fillbetween}

\begin{document}
\begin{tikzpicture}[every plot/.append style={samples=50}]
\draw[name path=f, green!70!black, line width=0.7pt] 
	plot[domain=-3:3] (\x,{(\x)^2}) 
	node[right] {$f$}
;
\draw[name path=g, red!70!black, line width=0.7pt] 
	plot[domain=-3:3] (\x,{-(\x)^2+4})
	node[right] {$g$}
;
     
% Fläche füllen
\fill[
	lightgray!20,
	intersection segments={
		of=f and g,
		sequence={A1 -- B1}
	}
];
\end{tikzpicture}
\end{document}

maedsi94
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 22. Nov 2018, 19:48

Beitrag von maedsi94 »

Super, vielen Dank!

Ich habe gerade einige Funktionen ausprobiert und es funktioniert soweit auch ganz gut. Wenn ich jedoch für eine Funktion den Sinus verwende, ist ein Stück überschüssige Fläche zu sehen:
\documentclass{standalone}
\usepackage{pgfplots}% lädt tikz

\usepgfplotslibrary{fillbetween}

\begin{document}
\begin{tikzpicture}[every plot/.append style={samples=50}]
\draw[name path=f, green!70!black, line width=0.7pt]
plot[domain=-3:3] (\x,{(\x)^2})
node[right] {$f$}
;
\draw[name path=g, red!70!black, line width=0.7pt]
plot[domain=-3:3] (\x,{sin(\x r) +3})
node[right] {$g$}
;

% Fläche füllen
\fill[
lightgray!20,
intersection segments={
	of=f and g,
	sequence={A1 -- B1}
}
];
\end{tikzpicture}
\end{document}
Dasselbe Ergebnis erhalte ich auch für eine e-Funktion (0.3*e^x +1)...

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

\documentclass{standalone}
\usepackage{pgfplots}% lädt tikz

\usepgfplotslibrary{fillbetween}

\begin{document}
\begin{tikzpicture}[every plot/.append style={samples=50}]
\pgfdeclarelayer{background layer}% siehe Kapitel 112 in pgfmanual.pdf
\pgfsetlayers{background layer,main}

\draw[name path=f, green!70!black, line width=0.7pt]
	plot[domain=-3:3] (\x,{(\x)^2})
	node[right] {$f$}
;
\draw[name path=g, red!70!black, line width=0.7pt]
	plot[domain=-3:3] (\x,{sin(\x r) +3})
%	plot[domain=-3:3] (\x,{0.3*e^\x +1})
	node[right] {$g$}
;

% Fläche füllen
\begin{pgfonlayer}{background layer}
\fill[
	lightgray!20,
	intersection segments={
	   of=f and g,
	   sequence={A1 -- B1[reverse]}% <- geändert
	}
];
\end{pgfonlayer}
\end{tikzpicture}
\end{document}
Meine Quelle

Antworten