毎年恒例のポストスクリプトによる幾何問題の勉強を始めよう。
今年は、3辺の長さが与えられた「鈍角三角形」に、円が内接する問題だ。まずは、該当する図形をpostscriptで描いてみたい。
私の基本方針は、幾何の問題は代数の問題に落として解く、というデカルトの「代数幾何」の精神に従うこと。したがって、図形を描く際には、まず座標系を導入する。一番やりやすいのはAを原点とし、ABをx軸に合わせることだ。したがって、問題文の設定からA=O(0,0), B=(4,0)とおける。
問題はCの座標である。これは計算しないとわからないので、まずC(x,y)と置くことにしよう。
ACは原点から伸びる線分(長さ5)になっているので、 x軸から線分ACまでの角度を\(\theta\)とおき、極座標を用いて
\[
x = 5\cos\theta, \quad y=5\sin\theta
\]
と表すことにしよう。問題文をよく読むと\(\cos\theta = -\frac{1}{5}, \sin\theta=\frac{2\sqrt{6}}{5}\)がすでに与えられているから、Cの座標はすぐに、
C=(\(-1, 2\sqrt{6}\))であることが計算できる。
3点の座標がわかれば、postscriptで三角形を描くことは簡単だ。
0 0 moveto
4 0 lineto
-1 2 6 sqrt mul lineto
closepath
でOK(もちろん、相対座標と絶対座標の調整とか、細かい設定は必要だが、エッセンスは上の3行)。
このままでは面白くないので、3辺の長さ\(a,b,c\)が与えられた時に座標A,B,Cを計算して、三角形ABCを描くpostscriptのプログラムを考えてみよう。a=BC, b=CA, c=ABとおく。
上の考察に習えば、点A,B,Cの座標は\((0,0), (c,0), (b\cos\theta,b\sin\theta)\)とおける。ただし\(\theta = \angle\text{BAC}\)とした。A,Bは確定だから、あとはCの座標を計算するだけだ。これも上と同じようにして、ピタゴラスの定理により
\[
a^2 = (b\cos\theta - c)^2 +(b\sin\theta)^2
\]
これを整理すると
\[
\cos\theta = \frac{b^2+c^2-a^2}{2bc},\quad
\sin\theta = \frac{\sqrt{(a-b+c)(a+b-c)(b+c-a)(b+c+a)}}{2bc}
\]
を得る。ただし、\(\sin\theta\)は\(\sin^2\theta+\cos^2\theta=1\)を利用した。
よく見ると、\(\cos\theta\)の式の方は、余弦定理を変形したものであることに気づくだろう。つまり、余弦定理を記憶していれば、座標を用いた代数計算をしなくても、この問題を解くことはできる。一方、逆に考えれば、余弦定理など覚えていなくても、ピタゴラスの定理さえ知っていれば、代数幾何の手法で余弦定理を自分で導出し、この問題を解くことができる、ということだ。
以上の結果をプログラムすると、次のようなprocedure(関数のようなもの)を定義できる。
\triangle0 {
/c exch def
/b exch def
/a exch def
/x b b mul c c mul add a a mul sub 2 b mul c mul div def
/y 4 b b mul mul c c mul mul a a mul add b b mul sub c c mul sub sqrt 2 b mul c mul div def
0 0 moveto
c 0 lineto
x y lineto
closepath
} def
使い方は、
a b c triangle0
である。これを使えば、上図のような図形が簡単に描けるようになる。もちろん、今回の問題では
7 5 4 triangle0
と打てば良い。
さて、基本的な図が手に入ったので、これを元に問題を解いてみよう。
0 件のコメント:
コメントを投稿