パップス・チェーン(2)
たくさんの接する円があるとします。それらの円の隙間を円で埋めてしまいたくなりますね(なりません)。<パクリ(パクリ元)
そんな充填フェチや空隙フォビアの方々に朗報!
前回見た、基本的なパップス・チェーンを第1次円列とすると、それらの円列に接する第2次の円列、その第2次円列に接する第3次円列群の中心座標と半径を求める式もあるそうです。パップス・チェーン(Wolfram Mathworld)で説明されていました。
ここでパップス・チェーンの第1次円列の中心座標と半径を求める式および図を再掲します。
分かりやすくするために C の直径 1 – r を s、また各分母の共通部分を val と置くと以下のようになります。
val = n^2 * s^2 + r
xn = r * (1 + r) / (2 * val)
yn = n * r * s / val
rn = r * s / (2 * val)
第2次円列は第1次円列の下側にできる三角形を埋める円列で、式および図は以下のとおり。
val = 4 + 4 * n * (n - 1) * s^2 + r * s;
xn = r * (7 + r) / (2 * val);
yn = 2 * (2 * n - 1) * r * s / val;
rn = r * s / (2 * val);
第3次円列は第2次円列の周囲の三角形を埋める円列で3種類になります。
まずは第1の式およびその図。
val = 12 + 3 * n * (3 * n - 4) * s^2 + r * (4 * r - 7);
xn = r * (17 + r) / (2 * val);
yn = 3 * (3 * n - 2) * r * s / val;
rn = r * s / (2 * val);
第2の式およびその図。
val = 9 + 12 * n * (n - 1) * s^2 + r * (4 * r - 1);
xn = r * (17 + 7 * r) / (2 * val);
yn = 6 * (2 * n - 1) * r * s / val;
rn = r * s / (2 * val);
そして第3の式およびその図。
val = 9 + 3 * n * (3 * n - 2) * s^2 - r * s;
xn = r * (17 + r) / (2 * val);
yn = 3 * (3 * n - 1) * r * s / val;
rn = r * s / (2 * val);
このように5つの円列がそれぞれ簡潔な式で得られます。
以上を踏まえて、ActionScript 3.0 でパップス・チェーンを描いたものがこちらです。
Comments
Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!