の一対の螺旋曲線の間のスペースを埋めようとしていますtikz
。ライブラリを使用してみましたfillbetween
が、螺旋全体が陰影付けされるだけです。どなたかヒントをお持ちの方はいらっしゃいませんか? よろしくお願いします。
\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}
答え1
その間、MetaPost を使用したソリューションがここにあります。Tikz と MetaPost の構文には多くの類似点があるため、必要なソリューションを提供するのに役立つ可能性があります。
重要な点は、2 つのスパイラルを追加し (そのうちの 1 つは元に戻します)、結果のパス (--cycle
命令) を閉じて、それを塗りつぶすことです。
fill spiral1--reverse spiral2--cycle withcolor .8white;
組版の利便性のために、MetaPost コードを LuaLaTeX プログラムに挿入しました。
\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}
出力:
編集以下は、Thruston の発言に触発されたバリエーション (出力は同じ) です。
\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}
答え2
なんとか tikz コードを動作させることに成功しました。以下はコードです。皆さん、ヒントをありがとう。
\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}