tikzで3辺の長さを指定した三角形を描く

tikzはtexの本文に少し図をつけるときには便利なパッケージである。emathは図に関しては準備が大掛かりになるので、そういう準備をしたくないときには使いにくい。よって、一時期、tikzで業務に必要な図を描いていた。

最近、大昔にtikzで3辺を指定した三角形を描いた図が発見された。ソースを見ると、ひねったことをしていたのでここで紹介する。何かを参考にしてそれからアイデアをうまく取ってきたのか、ほとんどどこかにあったソースを改変したのかの記憶はない。

自分も忘れてたぐらいなので、ここに残しておけば何かのときに思い出せるかもしれない、ぐらいなので紹介しておく。

以下が画像。

f:id:baruku07:20180205230803p:plain

上を出力するためのソース。

\documentclass[uplatex,dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{intersections,calc}

\begin{document}
 \begin{tikzpicture}[scale=1]
 \def\lena{4} %aの長さ
 \def\lenb{2} %bの長さ
 \def\lenc{3} %cの長さ
 %%辺ABを紙と平行に描いている。
 \coordinate (A) at (0,0) ; %点Aの座標に(A)と命名。
 \coordinate (B) at (\lenc,0) ; %辺ABの長さはcなのでBの座標は(c,0)
 \node [left] at (A) {A} ; 
 \node [right] at (B) {B} ; 
 %点Aからbの半径で円を描く。実際の描画はしない。
 \path [name path=path1] ($(A)$) circle (\lenb)  ; 
%点Bからaの半径で円を描く。実際の描画はしない。
 \path [name path=path2] ($(B)$) circle (\lena)  ; %点Bからaの半径で円を描く。
 %2円の交点を求める。
 %coordinateのオプションではだめで、一度、空のpathを描くことに注意。
\path [name intersections={of=path1 and path2,by=x} ] ; 
\coordinate (C) at (x) ; 
 \node [above] at (C) {C};
 %ABCを線で結んで三角形を描く。
 \draw (B) to [edge label'= \lena]  (C) to [edge label'=\lenb] (A) to [edge label'=\lenc]cycle;
 \end{tikzpicture}
 
\end{document}

やっていることは、コンパスで円を描いて交点を求めてそれを使って三角形を描いているだけである。中学生の気分な解法である。交点は2つできるはずだが、まあなぜかこれでうまくいっている。どちらか適当に1個選択されるらしい。

このいい加減さが気になるのであれば、複数の交点を配列に入れて、いずれかを明示的に選択することもできるらしい。あるいは、円でなく180度の円弧を描いて交点を一つにすれば良い。

引っかかるところは、coordinateにオプションを設定しても交点を計算してくれないところである。マニュアルのintersectionのsectionの例が、drawのオプションで交点を計算させている。そのため、同じノリでいかないといけないと思ってしまう。しかし、前半のtutorialの例で出てくるintersectionの例では、pathが多用されている。よって、交点のみを求めて他に何もしたくないときにはpathを使えば良いことがわかる。

上の図の使用目的

上は、三角形の図を与えて、その図から余弦定理でcosを求めさせる問題を作るときに使ったもの。よって、角をの名前や辺の長さを書く部分もあえてつけてある。高校数学的には、この形のほうが需要がありそうなので、参考になるかと思ってあえて残した。

点線を長さの数値の前後につけることも頑張ればできるが(たぶん頑張らない方法もあるが)、そこはコストと成果のバランスであえてしていない。

三角形の大きさの調整はscaleの値を調整すれば良い。その他、tikzを色々読めばいろいろな調整方法は見つかるはず。

どうしてこの方法にたどりついたか(余談)

3辺なら三角比の座標計算で目的の三角形を描くのも難しく無い(私は計算が嫌だけど)。しかし、4辺を指定した四角形を描くために計算となると、もう嫌以外の何者でもない。

この解法は、三角形にもう一つ四角形をくっつけて四角形を描こうとしたときに思いついたものである。座標軸に対して斜めになっている辺を底辺として考えないとならない状況だったので、なんとか計算無しでしようとして考えた方法。

2/8追記

studyaidで、コンパスを使って正確に三角形を描く方法を解説していたblogを見て思いついたものだったことを思い出した。

なお、この手のネタはあくまでネタです。当然、こういうものが業務で要求される場合は、普通はStudyaidなどでやっつけるべきです。