Tikzの座標計算ライブラリ”calc”

入試の時期が近くなると、Tikzで図を描くことが多くなる。立体図を簡単に描くに便利な tikzlibrary についてのメモ。

例えば、立方体の一部を切り取った次のような図形を描くとする。

A1〜A4、B1〜B4の点の座標は、次のように指定する。$x$座標、$y$座標の中で$\sin$や$\cos$を用いるときには、波括弧で括っておく。

\coordinate (A1) at (0,0);
\coordinate (A2) at (10,0);
\coordinate (A3) at ({5*cos(30)+10},{5*sin(30)});
\coordinate (A4) at ({5*cos(30)},{5*sin(30)});

\coordinate (B1) at (0,10);
\coordinate (B2) at (10,10);
\coordinate (B3) at ({5*cos(30)+10},{5*sin(30)+10});
\coordinate (B4) at ({5*cos(30)},{5*sin(30)+10});

一方、C1はB1とB2の中点、C2はB2とA2の中点、C3はB2とB3の中点となっているので、ベクトル的に座標を決めたいときには、\usetikzlibrary{calc} を用いて、次のように指定する。

\coordinate (C1) at ($0.5*($(B1)+(B2)$)$);
\coordinate (C2) at ($0.5*($(A2)+(B2)$)$);
\coordinate (C3) at ($0.5*($(B2)+(B3)$)$);

$(B1)+(B2)$ を座標計算し、その座標の値を$X$とする。
次に$0.5*(X)$の座標計算し、その座標の値を$Y$とする。
座標の計算をするところを💲マークで挟む形で計算ができる。

座標を決めれば、あとは直線で結ぶ。

\draw[line width=2pt,blue] (C2)--(A2)--(A3)--(B3)--(C3)--(C2)--(C1)--(C3);
\draw[line width=2pt,violet] (C1)--(B1)--(B4)--(B3);
\draw[line width=2pt,red] (B1)--(A1)--(A2);
\draw[line width=1pt,dotted] (B4)--(A4)--(A3);
\draw[line width=1pt,dotted] (A1)--(A4);
\draw(C1) circle(5pt);

コードの全体は以下のようになる。

\documentclass[uplatex]{jsarticle}
\usepackage[utf8]{inputenc}
\usepackage[dvipdfmx]{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{center}
\begin{tikzpicture}[scale=0.3]

\coordinate (A1) at (0,0);
\coordinate (A2) at (10,0);
\coordinate (A3) at ({5*cos(30)+10},{5*sin(30)});
\coordinate (A4) at ({5*cos(30)},{5*sin(30)});

\coordinate (B1) at (0,10);
\coordinate (B2) at (10,10);
\coordinate (B3) at ({5*cos(30)+10},{5*sin(30)+10});
\coordinate (B4) at ({5*cos(30)},{5*sin(30)+10});

\coordinate (C1) at ($0.5*($(B1)+(B2)$)$);
\coordinate (C2) at ($0.5*($(A2)+(B2)$)$);
\coordinate (C3) at ($0.5*($(B2)+(B3)$)$);

\draw[line width=2pt,blue] (C2)--(A2)--(A3)--(B3)--(C3)--(C2)--(C1)--(C3);
\draw[line width=2pt,violet] (C1)--(B1)--(B4)--(B3);
\draw[line width=2pt,red] (B1)--(A1)--(A2);
\draw[line width=1pt,dotted] (B4)--(A4)--(A3);
\draw[line width=1pt,dotted] (A1)--(A4);
\draw(C1) circle(5pt);

\draw (A1) node[below]{A1};
\draw (A2) node[below]{A2};
\draw (A3) node[below]{A3};
\draw (A4) node[below]{A4};

\draw (B1) node[above]{B1};
\draw (B2) node[below]{B2};
\draw (B3) node[above]{B3};
\draw (B4) node[above]{B4};

\draw (C1) node[above]{C1};
\draw (C2) node[left]{C2};
\draw (C3) node[below right]{C3};

\draw[fill=green] (B2) circle(8pt);

\end{tikzpicture}
\end{center}
\end{document}
目次