극곡선 사이 채우기

극곡선 사이 채우기

에서 한 쌍의 나선형 곡선 사이의 공간을 채우려고 합니다 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의 구문은 유사점이 많으므로 원하는 솔루션을 제공하는 데 도움이 될 수 있습니다.

핵심은 두 개의 나선을 추가하고(그 중 하나는 되돌려짐) 결과 경로를 닫은 --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}

소용돌이

관련 정보