見出し画像

TikZ 実用例(10)~繰り返し処理~

久しぶりの投稿です。
長い間、待たせてゴメン…(Kiroro って、今何してるの?)

今回は、繰り返し処理\foreach を解説します。(以前の記事にも出てますが…)

基本的な使い方

基本的には
 \foreach 変数 in{変数の動く集合} 命令
という形で使います。
例えば

\foreach \x in{1,2,3,4,5} \draw (\x,0) node{ほげ};

とすると

画像

となります。
これは、変数 \x を 1 から 5 まで動かして、点 (\x, 0) に「ほげ」と書いています。
なお、これは

\foreach \x in{1,...,5} \draw (\x,0) node{ほげ};

としても、同じように出力してくれます。

「命令」を {  } 内に入れて、複数の命令を実行することもできます。
例えば

\foreach \x in{1,...,5} 
  {
  \draw (\x,0) node{ほげ};
  \draw[->,>=latex] (\x,0.3) to[bend left=30] (\x+0.9,0.3);
  };

とすると

画像

となります。

変数のとり方

変数の動く範囲の集合の「…」はけっこう賢くて

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

とすると、「偶数だけだな」と解釈してくれて

画像

としてくれます。

また、変数は数でなくても構いません!
例えば、次のように「点の名前」をとることもできます。

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

%%% ここまでは1つ前の例と同じ %%%

\coordinate (A) at (2,1);
\coordinate (B) at (3,8);
\coordinate (C) at (5,2);
\coordinate (D) at (7,3);
\coordinate (E) at (8,1);

\foreach \P in{A,...,E}
  {
  \fill[red] (\P) circle[radius=3pt];
  \draw[red] (\P) node[above]{\P};
  };

とすると

画像

となります。

2変数の場合

変数を2つ設定したい場合には
 \foreach \x/\y in{集合} 命令
という形で入力します。
つまり,組 (\x, \y) を \x/\y と表現しているようです。
だから、例えば

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

%%% ここまで上の例と同じ %%%

\foreach \x/\y in{2/1,3/8,5/2,7/3,8/1} \fill (\x,\y) circle[radius=3pt];

とすることで,点 (\x, \y) を一気にプロットできて、次図のようになります。

画像

ちなみに \foreach を重ねて

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

%%% ここまで上の例と同じ %%%

\foreach \x in{1,...,10}
  \foreach \y in{1,...,10} \fill (\x,\y) circle[radius=3pt];

とすると

画像

となります。

区分求積法の図

この \foreach を利用して、区分求積法の図を描いてみました。

画像

ソースコードはこちら。

\begin{tikzpicture}[scale=3,samples=100]

  \foreach \k in{0.1,0.2,...,0.9,1.0}
    \filldraw[fill=black!20!] (\k-0.1,0) rectangle (\k,{pow(\k,2)});

  \draw[->,>=stealth,semithick] (-0.2,0)--(1.2,0) node[right]{$x$};
  \draw[->,>=stealth,semithick] (0,-0.2)--(0,1.5) node[left]{$y$};
  \draw (0,0) node[below left]{O}
        (1,0) node[below]{$1$}
        (0.6,0) node[below]{\footnotesize$\bunsu{k}{n}$}
        ;

  \draw[dashed,very thin] (0.5,0.36)--(0,0.36)
    node[left]{\footnotesize$\left(\bunsu{k}{n}\right)^{\hspace{-2pt}2}$};
  \draw[very thick] plot[domain=-0.2:1.2] (\x,{pow(\x,2)}) node[above]{$y=x^2$};

\end{tikzpicture}

折れ線グラフ

「統計」の授業で使えそうな「折れ線グラフ」はこんな感じ。

画像

ソースコードはこちら。

\begin{tikzpicture}[scale=1]

\draw[step=1,very thin, gray] (0,0) grid (5.5,5.5);

\draw[->,>=stealth,semithick] (0,0)--(5.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,5.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \x/\y in{0/2,1/3,2/0,3/4,4/1,5/2}
  {
  \coordinate (P{\x}) at (\x,\y);
  \fill (P{\x}) circle[radius=2pt];
  }
  
\foreach \x in{1,...,5}
  {
  \small
  \draw (\x,0) node[below]{$\x$}
        (0,\x) node[left]{$\x$}
        ;
  }
  
\foreach \m in{0,...,4}
  {
  \tikzmath
    {
    int \n;
    \n=\m+1;
    }
  \draw[very thick] (P{\m})--(P{\n});
  }
  
\end{tikzpicture}

最後の方の \tikzmath で「変数 \n を \m+1 で定義」して使うことが出来たとき、自分はとても気持ちよかったです(笑)

今回はここまで。参考になったでしょうか?
それでは、また、そのうちお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?

コメント

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。
予備校講師(数学科)です。
TikZ 実用例(10)~繰り返し処理~|大山 壇
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1