アポロニウスのガスケット(1)
アポロニウスのガスケット(もしくはアポロニウスの網)という図形があります。
例えば Apollonian Gasket(Wolfram Mathworld)とか。
これは古代ギリシアの数学者であるペルガのアポロニウスに由来するものとのこと。見てのとおり、円を敷き詰めたものですが、これはデカルトの円定理を使えば簡単に描くことができます。
デカルトの円定理(または、ソディの円)とは、他の2つの円に1点で接する(正接する)3つの円が存在するとき、その3つの円にそれぞれ1点で接する円の中心点と半径を求める計算式で、3つの正接円に正接する円は以下の2つが得られます。
- 3正接円が作る隙間に位置する、3正接円に内接する円
- 3正接円をその内部に含むように位置する、3正接円に外接する円
3つの正接円をそれぞれ A、B、C、その内接円を D1 とするとき、以下の3つの円の組み合わせを考えます。
- A と B と D1
- B と C と D1
- C と A と D1
それぞれデカルトの円定理を使って内接円 D2 を求めます。
そして、上の3つの円のうち、D1 を D2 に置き換えて、再びその内接円 D3 を求めます。
そして D2 を D3 に置き換えて…… というように3分木の再帰で内接円を計算し、それを描画し続けるとアポロニウスのガスケットになります。
というわけで、先だって wonderfl に投稿した「ソディの円」を流用してできたのが↓
アポロニウスのガスケット Apollonian Gasket (1) – wonderfl build flash online
敷き詰められた円が、凹曲線の三角形を描いていますが、その三角形の各凹曲線が、3つの正接円の円弧である、というわけです。
なお、このコードにおける再帰処理の終了判定は再帰の段階数ではなく、生成される内接円の半径の大きさが指定の値より小さくなった場合としていますが、Apollonian Circles(Da Fish in Sea)のサンプルコードを参考にしたものです。
Comments
Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!