アポロニウスのガスケット(2)
ところでアポロニウスのガスケットですが、例えば wikipedia 英語版の当該項目などでは右のような図形と紹介されています。
前回、wonderfl に投稿したコードは、この図形でいえば、その中心部分にできる極めて小さな三角形の隙間を充填した円群でした。
今回は、右のような円充填されたアポロニウスのガスケットはどのようにしたら描けるのか、という話。
つまり、3つの正接円とその外接円で作られる鎌形の隙間を充填する円の中心座標と半径はどのようにして求めるのか、ということです。
右のような図において、黒い小さい円をそれぞれ A、B、赤い円を C、黒い大きな円を D とします。
今まで見てきたデカルトの円定理は A、B、C から D を求めるということでした。
では、A、B、D から C を求めるのはどうすればいいのか。
再び、デカルトの円定理を見てみましょう。
(kA + kB + kC + kD)^2 = 2 * (kA^2 + kB^2 + kC^2 + kD^2)
これは、3つの正接円に内接もしくは外接する円の半径(曲率)で成り立つ式。
(kA*zA + kB*zB + kC*zC + kD*zD)^2 = 2 * (kA^2*zA^2 + kB^2*zB^2 + kC^2*zC^2 + kD^2*zD^2)
これは、3つの正接円に内接もしくは外接する円の中心座標を複素数として考えたときに成り立つ式。
A、B、C、D がすべて並列になっています。
ってことは内接とか外接とかで惑わされそうになりましたが、そんなこと一切関係なくって、4つの円のうち、いずれか3つが分かっていれば、残りの1つは計算で求められるということじゃあないですか。
だったら話は簡単。前回のアポロニウスのガスケットのコードをちょっと改造すればいいだけ。
を、その初期値が「正接円A、B、C」に加えて、「A、B、外接円」「B、C、外接円」「C、A、外接円」でも、3分木で内接円を求めるステップを再帰させればよいってことですね。
そんなわけでできたのが↓
アポロニウスのガスケット Apollonian Gasket (2) – wonderfl build flash online
Comments
Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!