Я пытаюсь воспроизвести спиральную форму на картинке ниже в 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
.