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

Paul からインスピレーション (およびコード) を得て、別の方法を示すために、角度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

以下は Paul Gaborit のコードをforeach短くするために triple で書き直したものです ;)。

\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}

注記:私は、3 番目の を導入して(-1.5,-1) cos ++(.5,1) sin ++(.5,1) -- ++(1,0)との間の中心対称性を使用するという Ignasi の提案を使用して更新することにしました。cos ++(-.5,-1) sin ++(-.5,-1) -- cycle\foreach

関連情報