3

TikZで碁盤を描こう

205
0
$$\newcommand{combi}[2]{{}_{#1}C_{#2}} \newcommand{pasfibo}[0]{![算術三角形とフィボナッチ数列](/uploads/image/20201113231516.jpg =360)} \newcommand{sanzyutusankakukei}[0]{![算術三角形](/uploads/image/20201113231328.jpg =400)} \newcommand{TikZ}[0]{\mathrm{Ti}k\mathrm{Z}} $$

$\TikZ$$\LaTeX$で図を描くためのパッケージです。Mathlogでは$\TikZ$を使うことができないので、ご注意ください。

$\TikZ$の使い方

$\TikZ$を使うためには、プリアンブルで\usepackage{tikz}と宣言する必要があります。さらに$\TikZ$にはいくつかの拡張機能がありますが、ここでは割愛します。

$\TikZ$のコマンドは

\tikz コマンド;

というように使います。例えば

\tikz \draw(0,0)--(1,0);

とすると直線が書けます。ここで、最後のセミコロンは必ず必要なものになります。忘れないようにしましょう。

複雑な(複数行の)コマンドを使うときは

      \ begin{tikzpicture}
    コマンド;
    コマンド;
\ end{tikzpicture}
    

とします。

$\TikZ$には描画のための様々なコマンドが実装されていますが、今回は以下の四つを使います。

  • \draw 線を描く。\draw(始点)--(終点);で直線を描ける。\draw(中心)circle(半径);で円を描ける。
  • \fill 図形の内側を塗りつぶす。
  • \filldraw 図形の境界と内側の色を別に指定する。
  • \node 点にラベルを付ける。\node(点の名前)at(座標){ラベル};で指定した座標に名前を付け、ラベルを表示する。

オプションを指定したいときは\draw[オプション](始点)--(終点);のようにコマンドの直後に置きます。

\drawなどの途中でラベルを付けたいときは、\;の間にnodeを記述します。

使用例 使用例

碁盤を描く

まずは九路盤を描いてみましょう。碁盤は基本的に直線で構成されているので、描くのはそんなに難しくありません。

      \ begin{tikzpicture}
    \draw(1,1)--(1,9);
    \draw(2,1)--(2,9);
    \draw(3,1)--(3,9);
    \draw(4,1)--(4,9);
    \draw(5,1)--(5,9);
    \draw(6,1)--(6,9);
    \draw(7,1)--(7,9);
    \draw(8,1)--(8,9);
    \draw(9,1)--(9,9);
    \draw(1,1)--(9,1);
    \draw(1,2)--(9,2);
    \draw(1,3)--(9,3);
    \draw(1,4)--(9,4);
    \draw(1,5)--(9,5);
    \draw(1,6)--(9,6);
    \draw(1,7)--(9,7);
    \draw(1,8)--(9,8);
    \draw(1,9)--(9,9);
    \fill(5,5)circle(3pt);
\ end{tikzpicture}
    

縦横9本ずつの直線を引けば碁盤ができます。九路盤には星があるので\fill(5,5)circle(3pt);と書きます。毎回これを書くのは面倒なので\newcommand{\goban}{\draw(1,1)--(1,9);……}とし、

      \ begin{tikzpicture}
    \goban
\ end{tikzpicture}
    

と書くようにすれば簡単でしょう。

十三路盤や十九路盤も同じように作れます。ここで\goban{盤の大きさ}と碁盤の大きさを指定すればその大きさの盤が表示されるようなコマンドを作ってみましょう。

実は$\TeX$には一般的なプログラム言語におけるifのようなものが実装されています。ここではそのうち\ifnumを使います。これは\ifnum 条件 処理A\else 処理B\fiと書くと、条件が真のとき処理Aを、そうでないとき処理Bを行います。ただし、条件は何でもいいわけではなく\ifnum 3<1のように二つの整数を比べるものである必要があります。これを使うと、以下のようなコマンドが作れます。

      \newcommand{\goban}[1]{
    \ifnum #1=1
        \fill(0,0)circ(3pt);
    \fi
    \ifnum #1=2
        \draw(1,1)--(1,2);
        \draw(2,1)--(2,2);
        \draw(1,1)--(2,1);
        \draw(2,1)--(2,2);
    \fi
    \ifnum #1=3
        \draw(1,1)--(1,3);
        \draw(2,1)--(2,3);
        \draw(3,1)--(3,3);
        \draw(1,1)--(3,1);
        \draw(1,2)--(3,2);
        \draw(1,3)--(3,3);
    \fi
}
    

例えば

      \ begin{tikzpicture}
    \goban{3}
\ end{tikzpicture}
    

と書けば三路盤が表示されます。

ここでは一路盤から三路盤が作れるようにしましたが、同じように作っていけばもっと大きい盤にも対応できるようになります。

碁石を描く

碁盤ができただけでは囲碁の図を描くことはできません。碁石を描くコマンドも用意しましょう。

      \newcommand{\siro}[1]{\filldraw[fill=white,draw=black](#1)circle(13pt);}
\newcommand{\kuro}[1]{\fill(#1)circle(13pt);}
    

とすれば指定した座標に石が置けます。例えば、

      \ begin{tikzpicture}
    \goban{6}
    \kuro{2,2}
\ end{tikzpicture}
    

と書けば

と表示されます。気を付けるべき点として、普通は左上を1の一としますが、このコマンドを使うときは左下を$(1,1)$として考える必要があります。

これでも最低限の機能はありますが、碁石に番号を振ったり、交点に文字を書いたりしたいことがよくあるので、そういうことができるようにしましょう。

      \newcommand{\siro}[2][]{\filldraw[fill=white,draw=black](#2)circle(13pt)node{\Large{#1}};}
\newcommand{\kuro}[2][]{\fill(#2)circle(13pt)node[white]{\Large{#1}};}
\newcommand{\mozi}[2][]{\node[fill=white]at(#2){\Large{#1}};}
    

こうすることで、

      \ begin{tikzpicture}
    \goban{6}
    \kuro[1]{2,2}
\ end{tikzpicture}
    

と書けば

と表示されるようになります

以上で$\TikZ$を使って碁盤を描くことができました。これで作った図は グラフによる碁の表現 グラフ碁の死活 で使っていますのでよければご覧ください。

付録

十九路盤まで対応できるようにしたものを載せておきます。

      \newcommand{\goban}[1]{
    \ifnum #1=1
        \fill(0,0)circ(3pt);
    \fi
    \ifnum #1=2
        \draw(1,1)--(1,2);\draw(2,1)--(2,2);\draw(1,1)--(2,1);\draw(2,1)--(2,2);
    \fi
    \ifnum #1=3
        \draw(1,1)--(1,3);\draw(2,1)--(2,3);\draw(3,1)--(3,3);\draw(1,1)--(3,1);\draw(1,2)--(3,2);\draw(1,3)--(3,3);
    \fi
    \ifnum #1=4
        \draw(1,1)--(1,4);\draw(2,1)--(2,4);\draw(3,1)--(3,4);\draw(4,1)--(4,4);\draw(1,1)--(4,1);\draw(1,2)--(4,2);\draw(1,3)--(4,3);\draw(1,4)--(4,4);
    \fi
    \ifnum #1=5
        \draw(1,1)--(1,5);\draw(2,1)--(2,5);\draw(3,1)--(3,5);\draw(4,1)--(4,5);\draw(5,1)--(5,5);\draw(1,1)--(5,1);\draw(1,2)--(5,2);\draw(1,3)--(5,3);\draw(1,4)--(5,4);\draw(1,5)--(5,5);
    \fi
    \ifnum #1=6
        \draw(1,1)--(1,6);\draw(2,1)--(2,6);\draw(3,1)--(3,6);\draw(4,1)--(4,6);\draw(5,1)--(5,6);\draw(6,1)--(6,6);\draw(1,1)--(6,1);\draw(1,2)--(6,2);\draw(1,3)--(6,3);\draw(1,4)--(6,4);\draw(1,5)--(6,5);\draw(1,6)--(6,6);
    \fi
    \ifnum #1=7
        \draw(1,1)--(1,7);\draw(2,1)--(2,7);\draw(3,1)--(3,7);\draw(4,1)--(4,7);\draw(5,1)--(5,7);\draw(6,1)--(6,7);\draw(7,1)--(7,7);\draw(1,1)--(7,1);\draw(1,2)--(7,2);\draw(1,3)--(7,3);\draw(1,4)--(7,4);\draw(1,5)--(7,5);\draw(1,6)--(7,6);\draw(1,7)--(7,7);\fill(4,4)circle(3pt);
    \fi
    \ifnum #1=8
        \draw(1,1)--(1,8);\draw(2,1)--(2,8);\draw(3,1)--(3,8);\draw(4,1)--(4,8);\draw(5,1)--(5,8);\draw(6,1)--(6,8);\draw(7,1)--(7,8);\draw(8,1)--(8,8);\draw(1,1)--(8,1);\draw(1,2)--(8,2);\draw(1,3)--(8,3);\draw(1,4)--(8,4);\draw(1,5)--(8,5);\draw(1,6)--(8,6);\draw(1,7)--(8,7);\draw(1,8)--(8,8);
    \fi
    \ifnum #1=9
        \draw(1,1)--(1,9);\draw(2,1)--(2,9);\draw(3,1)--(3,9);\draw(4,1)--(4,9);\draw(5,1)--(5,9);\draw(6,1)--(6,9);\draw(7,1)--(7,9);\draw(8,1)--(8,9);\draw(9,1)--(9,9);\draw(1,1)--(9,1);\draw(1,2)--(9,2);\draw(1,3)--(9,3);\draw(1,4)--(9,4);\draw(1,5)--(9,5);\draw(1,6)--(9,6);\draw(1,7)--(9,7);\draw(1,8)--(9,8);\draw(1,9)--(9,9);\fill(5,5)circle(3pt);
    \fi
    \ifnum #1=10
        \draw(1,1)--(1,10);\draw(2,1)--(2,10);\draw(3,1)--(3,10);\draw(4,1)--(4,10);\draw(5,1)--(5,10);\draw(6,1)--(6,10);\draw(7,1)--(7,10);\draw(8,1)--(8,10);\draw(9,1)--(9,10);\draw(10,1)--(10,10);\draw(1,1)--(10,1);\draw(1,2)--(10,2);\draw(1,3)--(10,3);\draw(1,4)--(10,4);\draw(1,5)--(10,5);\draw(1,6)--(10,6);\draw(1,7)--(10,7);\draw(1,8)--(10,8);\draw(1,9)--(10,9);\draw(1,10)--(10,10);\fill(3,3)circle(3pt);\fill(3,8)circle(3pt);\fill(8,3)circle(3pt);\fill(8,8)circle(3pt);
    \fi
    \ifnum #1=11
        \draw(1,1)--(1,11);\draw(2,1)--(2,11);\draw(3,1)--(3,11);\draw(4,1)--(4,11);\draw(5,1)--(5,11);\draw(6,1)--(6,11);\draw(7,1)--(7,11);\draw(8,1)--(8,11);\draw(9,1)--(9,11);\draw(10,1)--(10,11);\draw(11,1)--(11,11);\draw(1,1)--(11,1);\draw(1,2)--(11,2);\draw(1,3)--(11,3);\draw(1,4)--(11,4);\draw(1,5)--(11,5);\draw(1,6)--(11,6);\draw(1,7)--(11,7);\draw(1,8)--(11,8);\draw(1,9)--(11,9);\draw(1,10)--(11,10);\draw(1,11)--(11,11);\fill(4,4)circle(3pt);\fill(4,8)circle(3pt);\fill(8,4)circle(3pt);\fill(8,8)circle(3pt);
    \fi
    \ifnum #1=12
        \draw(1,1)--(1,12);\draw(2,1)--(2,12);\draw(3,1)--(3,12);\draw(4,1)--(4,12);\draw(5,1)--(5,12);\draw(6,1)--(6,12);\draw(7,1)--(7,12);\draw(8,1)--(8,12);\draw(9,1)--(9,12);\draw(10,1)--(10,12);\draw(11,1)--(11,12);\draw(12,1)--(12,12);\draw(1,1)--(12,1);\draw(1,2)--(12,2);\draw(1,3)--(12,3);\draw(1,4)--(12,4);\draw(1,5)--(12,5);\draw(1,6)--(12,6);\draw(1,7)--(12,7);\draw(1,8)--(12,8);\draw(1,9)--(12,9);\draw(1,10)--(12,10);\draw(1,11)--(12,11);\draw(1,12)--(12,12);\fill(4,4)circle(3pt);\fill(4,9)circle(3pt);\fill(9,4)circle(3pt);\fill(9,9)circle(3pt);
    \fi
    \ifnum #1=13
        \draw(1,1)--(1,13);\draw(2,1)--(2,13);\draw(3,1)--(3,13);\draw(4,1)--(4,13);\draw(5,1)--(5,13);\draw(6,1)--(6,13);\draw(7,1)--(7,13);\draw(8,1)--(8,13);\draw(9,1)--(9,13);\draw(10,1)--(10,13);\draw(11,1)--(11,13);\draw(12,1)--(12,13);\draw(13,1)--(13,13);\draw(1,1)--(13,1);\draw(1,2)--(13,2);\draw(1,3)--(13,3);\draw(1,4)--(13,4);\draw(1,5)--(13,5);\draw(1,6)--(13,6);\draw(1,7)--(13,7);\draw(1,8)--(13,8);\draw(1,9)--(13,9);\draw(1,10)--(13,10);\draw(1,11)--(13,11);\draw(1,12)--(13,12);\draw(1,13)--(13,13);\fill(4,4)circle(3pt);\fill(4,10)circle(3pt);\fill(10,4)circle(3pt);\fill(10,10)circle(3pt);
    \fi
    \ifnum #1=14
        \draw(1,1)--(1,14);\draw(2,1)--(2,14);\draw(3,1)--(3,14);\draw(4,1)--(4,14);\draw(5,1)--(5,14);\draw(6,1)--(6,14);\draw(7,1)--(7,14);\draw(8,1)--(8,14);\draw(9,1)--(9,14);\draw(10,1)--(10,14);\draw(11,1)--(11,14);\draw(12,1)--(12,14);\draw(13,1)--(13,14);\draw(14,1)--(14,14);\draw(1,1)--(14,1);\draw(1,2)--(14,2);\draw(1,3)--(14,3);\draw(1,4)--(14,4);\draw(1,5)--(14,5);\draw(1,6)--(14,6);\draw(1,7)--(14,7);\draw(1,8)--(14,8);\draw(1,9)--(14,9);\draw(1,10)--(14,10);\draw(1,11)--(14,11);\draw(1,12)--(14,12);\draw(1,13)--(14,13);\draw(1,14)--(14,14);\fill(4,4)circle(3pt);\fill(4,11)circle(3pt);\fill(11,4)circle(3pt);\fill(11,11)circle(3pt);
    \fi
    \ifnum #1=15
        \draw(1,1)--(1,15);\draw(2,1)--(2,15);\draw(3,1)--(3,15);\draw(4,1)--(4,15);\draw(5,1)--(5,15);\draw(6,1)--(6,15);\draw(7,1)--(7,15);\draw(8,1)--(8,15);\draw(9,1)--(9,15);\draw(10,1)--(10,15);\draw(11,1)--(11,15);\draw(12,1)--(12,15);\draw(13,1)--(13,15);\draw(14,1)--(14,15);\draw(15,1)--(15,15);\draw(1,1)--(15,1);\draw(1,2)--(15,2);\draw(1,3)--(15,3);\draw(1,4)--(15,4);\draw(1,5)--(15,5);\draw(1,6)--(15,6);\draw(1,7)--(15,7);\draw(1,8)--(15,8);\draw(1,9)--(15,9);\draw(1,10)--(15,10);\draw(1,11)--(15,11);\draw(1,12)--(15,12);\draw(1,13)--(15,13);\draw(1,14)--(15,14);\draw(1,15)--(15,15);\fill(4,4)circle(3pt);\fill(4,12)circle(3pt);\fill(12,4)circle(3pt);\fill(12,12)circle(3pt);
    \fi
    \ifnum #1=16
        \draw(1,1)--(1,16);\draw(2,1)--(2,16);\draw(3,1)--(3,16);\draw(4,1)--(4,16);\draw(5,1)--(5,16);\draw(6,1)--(6,16);\draw(7,1)--(7,16);\draw(8,1)--(8,16);\draw(9,1)--(9,16);\draw(10,1)--(10,16);\draw(11,1)--(11,16);\draw(12,1)--(12,16);\draw(13,1)--(13,16);\draw(14,1)--(14,16);\draw(15,1)--(15,16);\draw(16,1)--(16,16);\draw(1,1)--(16,1);\draw(1,2)--(16,2);\draw(1,3)--(16,3);\draw(1,4)--(16,4);\draw(1,5)--(16,5);\draw(1,6)--(16,6);\draw(1,7)--(16,7);\draw(1,8)--(16,8);\draw(1,9)--(16,9);\draw(1,10)--(16,10);\draw(1,11)--(16,11);\draw(1,12)--(16,12);\draw(1,13)--(16,13);\draw(1,14)--(16,14);\draw(1,15)--(16,15);\draw(1,16)--(16,16);\fill(4,4)circle(3pt);\fill(4,13)circle(3pt);\fill(13,4)circle(3pt);\fill(13,13)circle(3pt);
    \fi
    \ifnum #1=17
        \draw(1,1)--(1,17);\draw(2,1)--(2,17);\draw(3,1)--(3,17);\draw(4,1)--(4,17);\draw(5,1)--(5,17);\draw(6,1)--(6,17);\draw(7,1)--(7,17);\draw(8,1)--(8,17);\draw(9,1)--(9,17);\draw(10,1)--(10,17);\draw(11,1)--(11,17);\draw(12,1)--(12,17);\draw(13,1)--(13,17);\draw(14,1)--(14,17);\draw(15,1)--(15,17);\draw(16,1)--(16,17);\draw(17,1)--(17,17);\draw(1,1)--(17,1);\draw(1,2)--(17,2);\draw(1,3)--(17,3);\draw(1,4)--(17,4);\draw(1,5)--(17,5);\draw(1,6)--(17,6);\draw(1,7)--(17,7);\draw(1,8)--(17,8);\draw(1,9)--(17,9);\draw(1,10)--(17,10);\draw(1,11)--(17,11);\draw(1,12)--(17,12);\draw(1,13)--(17,13);\draw(1,14)--(17,14);\draw(1,15)--(17,15);\draw(1,16)--(17,16);\draw(1,17)--(17,17);\fill(4,4)circle(3pt);\fill(4,14)circle(3pt);\fill(14,4)circle(3pt);\fill(14,14)circle(3pt);
    \fi
    \ifnum #1=18
        \draw(1,1)--(1,18);\draw(2,1)--(2,18);\draw(3,1)--(3,18);\draw(4,1)--(4,18);\draw(5,1)--(5,18);\draw(6,1)--(6,18);\draw(7,1)--(7,18);\draw(8,1)--(8,18);\draw(9,1)--(9,18);\draw(10,1)--(10,18);\draw(11,1)--(11,18);\draw(12,1)--(12,18);\draw(13,1)--(13,18);\draw(14,1)--(14,18);\draw(15,1)--(15,18);\draw(16,1)--(16,18);\draw(17,1)--(17,18);\draw(18,1)--(18,18);\draw(1,1)--(18,1);\draw(1,2)--(18,2);\draw(1,3)--(18,3);\draw(1,4)--(18,4);\draw(1,5)--(18,5);\draw(1,6)--(18,6);\draw(1,7)--(18,7);\draw(1,8)--(18,8);\draw(1,9)--(18,9);\draw(1,10)--(18,10);\draw(1,11)--(18,11);\draw(1,12)--(18,12);\draw(1,13)--(18,13);\draw(1,14)--(18,14);\draw(1,15)--(18,15);\draw(1,16)--(18,16);\draw(1,17)--(18,17);\draw(1,18)--(18,18);\fill(4,4)circle(3pt);\fill(4,15)circle(3pt);\fill(15,4)circle(3pt);\fill(15,15)circle(3pt);
    \fi
    \ifnum #1=19
        \draw(1,1)--(1,19);\draw(2,1)--(2,19);\draw(3,1)--(3,19);\draw(4,1)--(4,19);\draw(5,1)--(5,19);\draw(6,1)--(6,19);\draw(7,1)--(7,19);\draw(8,1)--(8,19);\draw(9,1)--(9,19);\draw(10,1)--(10,19);\draw(11,1)--(11,19);\draw(12,1)--(12,19);\draw(13,1)--(13,19);\draw(14,1)--(14,19);\draw(15,1)--(15,19);\draw(16,1)--(16,19);\draw(17,1)--(17,19);\draw(18,1)--(18,19);\draw(19,1)--(19,19);\draw(1,1)--(19,1);\draw(1,2)--(19,2);\draw(1,3)--(19,3);\draw(1,4)--(19,4);\draw(1,5)--(19,5);\draw(1,6)--(19,6);\draw(1,7)--(19,7);\draw(1,8)--(19,8);\draw(1,9)--(19,9);\draw(1,10)--(19,10);\draw(1,11)--(19,11);\draw(1,12)--(19,12);\draw(1,13)--(19,13);\draw(1,14)--(19,14);\draw(1,15)--(19,15);\draw(1,16)--(19,16);\draw(1,17)--(19,17);\draw(1,18)--(19,18);\draw(1,19)--(19,19);\fill(4,4)circle(3pt);\fill(4,16)circle(3pt);\fill(16,4)circle(3pt);\fill(16,16)circle(3pt);\fill(10,4)circle(3pt);\fill(10,10)circle(3pt);\fill(10,16)circle(3pt);\fill(4,10)circle(3pt);\fill(16,10)circle(3pt);
    \fi
}


\newcommand{\siro}[2][]{\filldraw[fill=white,draw=black](#2)circle(13pt)node{\Large{#1}};}
\newcommand{\kuro}[2][]{\fill(#2)circle(13pt)node[white]{\Large{#1}};}
\newcommand{\mozi}[2][]{\node[fill=white]at(#2){\Large{#1}};}
    
投稿日:2022319
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

三星聯
三星聯
35
3779
主にフィボナッチ数列とパスカルの三角形の関係について書いていくと思います。

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中