Воспроизведение изображения спирали с помощью TikZ

Воспроизведение изображения спирали с помощью TikZ

Я пытаюсь воспроизвести спиральную форму на картинке ниже в TikZ, меня не интересуют атомы и текст, только спираль. Я хочу, чтобы спираль была окрашена в зеленый цвет, как на изображении.

изображение для воспроизведения

Я думал о том, чтобы каким-то образом объединить несколько синусоидальных кривых, однако это кажется мне совершенно неэффективным способом, и я не знаю, как раскрасить фигуру, используя этот метод.

решение1

Вот возможное решение:

введите описание изображения здесь

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}
  \colorlet{color 2}{lime!50!gray}
  \colorlet{color 1}{white}
  \foreach \dx in {0,2,4}{
    \begin{scope}[xshift=\dx cm]
      \draw[draw=gray,top color=color 2,bottom color=color 1]
      (0,0) -- ++(1,0) cos ++(.5,1) sin ++(.5,1) -- ++(-1,0) cos ++(-.5,-1) sin ++(-.5,-1) -- cycle;
    \end{scope}
  }
  \foreach \dx in {0,2,4}{
    \begin{scope}[xshift=1cm + \dx cm]
      \draw[draw=gray,top color=color 1,bottom color=color 2]
      (0,2) -- ++(1,0) cos ++(.5,-1) sin ++(.5,-1) -- ++(-1,0) cos ++(-.5,1) sin ++(-.5,1) -- cycle;
    \end{scope}
  }
\end{tikzpicture}
\end{document}

решение2

Черпая вдохновение (и код) у Пола, вот сжатая спираль с использованием inи outуглов, просто чтобы показать другой способ:

\documentclass[tikz,border=5]{standalone}
\begin{document}
\begin{tikzpicture}[x=3cm,y=0.8cm]
  \colorlet{color 2}{lime!50!gray}
  \colorlet{color 1}{white}
  \foreach \dx in {0,6,12}{
    \begin{scope}[xshift=\dx cm]
      \draw[draw=gray,top color=color 2,bottom color=color 1]
      (0,0) -- ++(1,0) to[out=0,in=180] ++(1,3) -- ++(-1,0) to[out=180,in=0] ++(-1,-3) -- cycle;
    \end{scope}
  }
  \foreach \dx in {0,6,12}{
    \begin{scope}[xshift=3cm + \dx cm]
      \draw[draw=gray,top color=color 1,bottom color=color 2]
      (0,3) -- ++(1,0) to[out=0,in=180] ++(1,-3) -- ++(-1,0) to[out=180,in=0] ++(-1,3) -- cycle;
    \end{scope}
  }
\end{tikzpicture}
\end{document}

введите описание изображения здесь

решение3

Вот код Пола Габорита, переписанный с использованием тройки, foreachчтобы сделать его короче ;).

\begin{tikzpicture}
  \colorlet{color 1}{lime!50!gray}
  \colorlet{color -1}{white}
  \foreach \s [evaluate=\s as \w using int(-\s)] in {1,-1} {
    \foreach \t in {0,1,2} {
      \draw[draw=gray,top color=color \s,bottom color=color \w, xshift=2*\t cm, xscale=\s]
      (-1.5,-1) \foreach \i in {1,-1} {cos ++(\i/2,\i) sin ++(\i/2,\i) -- ++(\i,0)};
    }
  }
\end{tikzpicture}

Примечание:Я пришел к обновлению, используя предложение Игнаси использовать центральную симметрию между (-1.5,-1) cos ++(.5,1) sin ++(.5,1) -- ++(1,0)и , cos ++(-.5,-1) sin ++(-.5,-1) -- cycleвведя третью \foreach.

Связанный контент