bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

Haskellでお絵かき(2)

1.円模様(アポロニウスのネット)

Diagramsのギャラリーを見ていると、一つの円の中に外接しあう大小の円が模様のように描かれているものがある。それはアポロニウスのネットと呼ばれている。これは、デカルトの円定理を用いて作られたものである。
デカルトの円定理を説明する前に、とりあえず、アポロニウスのネットを使ってみることにする。これをお互いに外接する3つの円を与える。この三つの円をもとにして無限の円がデカルトの円定理を利用して生成されるのだが、無限に出てきても困るので、どの程度までの大きさのものまで許すかを(最初の引数で)与える。それでは、0.01以上の円とし、三つの円の半径をそれぞれ、2,3,4としたものを与えてみる。三つの円の半径は独立なので、どのような値を与えてもかまわない。プログラムは次のようになる。

import Diagrams.Prelude
import Diagrams.Backend.Rasterific.CmdLine
import Diagrams.TwoD.Apollonian

example :: Diagram B R2
example = (apollonianGasket 0.01 2 3 4) # centerXY # pad 1.1

コンパイル、実行して、図を得る。
f:id:bitterharvest:20140802142244p:plain
なかなか、きれいな模様が得られた。

2.デカルトの定理

デカルトの定理は次のようになっている。三つの円がお互いに外接していたとする。それらの円の半径は、\(a,b,c\)であったとする。この時、これらの円に外接する円あるいは内接する円の半径をzとする。\( A=\frac{1}{a}, B=\frac{1}{b}, C=\frac{1}{c}, Z=\frac{1}{z} \)とすると、次が成り立つ。
\[
(A + B + C + Z)^2 = 2 * (A^2 + B^2 + C^2 + Z^2)
\]

3.円の中心を求める

三つの円の中心座標を複素数a’,b’,c’で表す。この時、これらの円に外接する円あるいは内接する円の中心座標を複素数z’とすると、次が成り立つ。
\[
(A a’+ Bb’ + Cc’ + Zz’)^2 = 2 * ((Aa’)^2 + (Bb’)^2 + (Cc’)^2 + (Zz’)^2)
\]

4.問題

デカルトの定理が正しいことを証明しなさい。

5.問題

デカルトの定理を用いて、apollonianGasket’を作成しなさい。