見出し画像

TikZ 実用例(11)~\tikzmath~

またまた久しぶりの投稿です(すみません…)。
今回は \tikzmath を紹介します。(今までにも使った例を出してはいますが)


図中で計算させる!

\tikzmath を使うと、変数を設定できます。(という認識なのですがあってます?)
例えば

\begin{tikzpicture}
  \tikzmath{
    \a = 3;
    \b = 2;
  }
  \draw (0,0) node {$\a$}
        (1,0) node {$\b$}
        ;
\end{tikzpicture}

とすると

と出力されます。
これは、\tikzmath の中で、\a を 3、\b を 2 と定義して、座標 (0, 0) に \a、(1, 0) に \b を出力しているということです。

もちろん、これだけなら \tikzmath を使う必要はありません。

次に、座標 (2, 0) に和 \a+\b の値を出力したいと思います。
例えば

\begin{tikzpicture}
  \tikzmath{
    \a = 3;
    \b = 2;
  }
  \draw (0,0) node {$\a$}
        (1,0) node {$\b$}
        (2,0) node {$\a+\b$}
        ;
\end{tikzpicture}

としても

となるだけで、和の値は計算されません。
ただ \a+\b と出力するだけになってしまいます。
そこで

\begin{tikzpicture}
  \tikzmath{
    \a = 3;
    \b = 2;
    int \s;
    \s = \a+\b;
  }
  \draw (0,0) node {$\a$}
        (1,0) node {$\b$}
        (2,0) node {$\s$}
        ;
\end{tikzpicture}

とすると

となって,和が計算されて「5」と出力されます!

これは
int \s; で「整数値の変数 \s」を用意しておき、
\s = \a+\b; でその \s を \a+\b の計算結果と定義している
ということです。

サイコロ2個の36マス

自分は『場合の数・確率』の基本は「数え上げ!」と教えています。
だから、樹形図や表を多用して説明するのです。
そうすると、「サイコロ2個」の問題で36マスの表を描くことが多いわけです。

例えば
「2個のサイコロを投げるとき、目の和が3の倍数となる確率は?」
なんて問題に対する解答として、自分は36マスを描いて和の値を書き込みたいのです。

それがこれ!

これを数えて、答えは 12/36 = 1/3 です。
まぁ、これぐらいなら他の方法でも効率よく答えを得られますが、今はそんなことはどーでもよくて、とにかく「36マスの表」を描きたいのです!

これは

\begin{tikzpicture}[scale=0.5]
  \draw (-1,1) grid[step=1] (6,-6)
        (-1,1)--(0,0)
        (-0.7,0.3) node {$a$}
        (-0.3,0.7) node {$b$}
        ;
  \draw[very thick] (0,1)--(0,-6) (-1,0)--(6,0);
  \foreach \a in{1,...,6}{
    \draw (-0.5,-\a+0.5) node {$\a$}
          (\a-0.5,0.5) node {$\a$}
          ;
    \foreach \b in{1,...,6}{
      \tikzmath{
        int \s;
        \s = \a+\b;
      }
      \draw (\b-0.5,-\a+0.5) node {$\s$};
    }
  }
\end{tikzpicture}

と入力しています。

解説

どういうことかというと、まず


\draw (-1,1) grid[step=1] (6,-6)
      (-1,1)--(0,0)
      (-0.7,0.3) node {$a$}
      (-0.3,0.7) node {$b$}
      ;
\draw[very thick] (0,1)--(0,-6) (-1,0)--(6,0);

で、次図のように格子状の線(プラスα)を描いています。
(位置を分かりやすくする為に、赤い座標軸を入れてあります)

そして、\foreach で \a を1、2、…、6まで動かしながら

\foreach \a in{1,...,6}{
    \draw (-0.5,-\a+0.5) node {$\a$}
          (\a-0.5,0.5) node {$\a$}
          ;
}

とすると

となります。
つまり、座標 (-0.5, -\a+0.5) と (\a-0.5, 0.5) に \a の値を出力しています。

そして、この \foreach の中で、さらに \foreach を重ねて \b を1から6まで動かすのですが、まずは \b = 1 で固定した場合を見てみましょう。

\foreach \a in{1,...,6}{
    \draw (-0.5,-\a+0.5) node {$\a$}
          (\a-0.5,0.5) node {$\a$}
          ;
  \foreach \b in{1}{
      \tikzmath{
        int \s;
        \s = \a+\b;
      }
      \draw (\b-0.5,-\a+0.5)node{$\s$};
    }
}

このようにすると、座標 (1-0.5, -\a+0.5) に和 \s = \a+1 の値を出力して

となります。

したがって、\b を1から6まで動かして

\foreach \a in{1,...,6}{
    \draw (-0.5,-\a+0.5) node {$\a$}
          (\a-0.5,0.5) node {$\a$}
          ;
  \foreach \b in{1,...,6}{
      \tikzmath{
        int \s;
        \s = \a+\b;
      }
      \draw (\b-0.5,-\a+0.5)node{$\s$};
    }
}

とすると

となります♪

和以外の例

したがって、\s の定義をいじることで、違うパターンの36マスも作れるわけです。

例えば

\begin{tikzpicture}[scale=0.5]
  \draw (-1,1) grid[step=1] (6,-6)
        (-1,1)--(0,0)
        (-0.7,0.3) node {$a$}
        (-0.3,0.7) node {$b$}
        ;
  \draw[very thick] (0,1)--(0,-6) (-1,0)--(6,0);
  \foreach \a in{1,...,6}{
    \draw (-0.5,-\a+0.5) node {$\a$}
          (\a-0.5,0.5) node {$\a$}
          ;
    \foreach \b in{1,...,6}{
      \tikzmath{
        int \s;
        \s = \a*\b;  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 変更箇所はここだけ
      }
      \draw (\b-0.5,-\a+0.5) node {$\s$};
    }
  }
\end{tikzpicture}

とすれば、 \s = \a*\b の値を出力して

となるし

\begin{tikzpicture}[scale=0.5]
  \draw (-1,1) grid[step=1] (6,-6)
        (-1,1)--(0,0)
        (-0.7,0.3) node {$a$}
        (-0.3,0.7) node {$b$}
        ;
  \draw[very thick] (0,1)--(0,-6) (-1,0)--(6,0);
  \foreach \a in{1,...,6}{
    \draw (-0.5,-\a+0.5) node {$\a$}
          (\a-0.5,0.5) node {$\a$}
          ;
    \foreach \b in{1,...,6}{
      \tikzmath{
        int \s;
        \s = mod(\a*\b,4);  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 変更箇所はここだけ
      }
      \draw (\b-0.5,-\a+0.5) node {$\s$};
    }
  }
\end{tikzpicture}

とすれば、積 \a*\b を4で割った余りを出力して

となります。
(ちなみに、これは 2013 年の北海道大(理系)前期の問題)

以前の記事でも、三角形の外接円や内接円のときに \tikzmath を使っているので、ご参考にしていただければ幸いです。

それでは、また、いつの日か!

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