Ich versuche, den Raum zwischen einem Paar Spiralkurven in auszufüllen tikz
. Ich habe versucht, die fillbetween
Bibliothek zu verwenden, aber sie schattiert nur die ganze Spirale. Hat jemand einen Tipp, den er geben könnte? Danke.
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\usepgfplotslibrary{polar}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\begin{polaraxis}[hide axis]
\addplot [mark=none,domain=0:720,samples=600,thick,gray] {0.5*x};
\addplot [mark=none,domain=0:720-180,samples=600,thick,gray] {-0.667*x};
%\addplot [mark=none,domain=0:720,samples=600,thick,gray] {-0.5*x};
%\addplot [mark=none,domain=0:720-180,samples=600,thick,gray] {0.667*x};
\end{polaraxis}
\end{tikzpicture}
\end{document}
Antwort1
In der Zwischenzeit gibt es hier eine Lösung mit MetaPost. Da die Syntax von Tikz und MetaPost viele Ähnlichkeiten aufweist, kann dies hilfreich sein, um die gewünschte Lösung bereitzustellen.
Der Clou dabei ist, die beiden Spiralen anzufügen (eine davon umgekehrt), den entstandenen Pfad zu schließen ( --cycle
Anleitung) und ihn dann zu füllen:
fill spiral1--reverse spiral2--cycle withcolor .8white;
Ich habe den MetaPost-Code zur Vereinfachung des Schriftsatzes in ein LuaLaTeX-Programm eingefügt:
\documentclass[border=2mm]{standalone}
\usepackage{luamplib}
\mplibsetformat{metafun}
\begin{document}
\begin{mplibcode}
vardef polarfcn(expr tmin, tmax, tstep)(text f_t) =
save t; t := tmin;
(f_t*cos t, f_t*sin t)
forever: hide(t := t + tstep) exitunless t <= tmax;
.. (f_t*cos t, f_t*sin t)
endfor
if t - tstep < tmax: hide(t := tmax) .. (f_t*cos t, f_t*sin t) fi
enddef;
u := cm;
beginfig(1);
path spiral[];
spiral1 = polarfcn(0, 4pi, 4pi/600)(.5t) scaled u;
spiral2 = polarfcn(0, 3pi, 3pi/600)(-2/3t) scaled u;
fill spiral1--reverse spiral2--cycle withcolor .8white;
draw spiral1; draw spiral2;
endfig;
\end{mplibcode}
\end{document}
Ausgabe:
BearbeitenHier ist eine Variante (mit derselben Ausgabe), inspiriert von Thrustons Bemerkung.
\documentclass[border=2mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
vardef polarpnt(expr r, t) = r*dir t enddef;
vardef polarfcn(expr tmin, tmax, tstep)(text r) =
save t; t := tmin;
polarpnt(r, t)
forever: hide(t := t + tstep) exitif t > tmax; .. polarpnt(r, t) endfor
if t - tstep < tmax: hide(t := tmax) .. polarpnt(r, t) fi
enddef;
beginfig(1);
path spiral[];
spiral1 = polarfcn(0, 720, 1)(.5t);
spiral2 = polarfcn(0, 540, 1)(-2/3t);
fill spiral1 .. reverse spiral2 .. cycle withcolor .8white;
draw spiral1; draw spiral2;
endfig;
\end{mplibcode}
\end{document}
Antwort2
Ich habe es geschafft, den Tikz-Code zum Laufen zu bringen. Unten ist der Code. Vielen Dank an alle für die Hinweise.
\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepgfplotslibrary{fillbetween}
\usepgfplotslibrary{polar}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\begin{polaraxis}[hide axis]
\begin{scope}[]
\addplot+[mark=none,domain=0:720,samples=100,line width=1pt,gray,name path=B] {0.5*x};
\addplot+ [mark=none,domain=720-180:0,samples=100,thick,gray,name path=A] {-0.667*x};
\tikzfillbetween[of=A and B,on layer=,split,every even segment/.style={fill=none,draw=gray}]{gray}
\end{scope}
\end{polaraxis}
\end{tikzpicture}
\end{document}