Seite 1 von 1

Fläche zwischen Funktionen einfärben

Verfasst: Mi 30. Jan 2019, 20:02
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!

Verfasst: Mi 30. Jan 2019, 21:02
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}

Verfasst: Mi 30. Jan 2019, 22:22
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)...

Verfasst: Mi 30. Jan 2019, 22:53
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