パップス・チェーン(2)

2013 / 12 / 25 by
Filed under: Coding の素 
Bookmark this on Delicious
[`livedoor` not found]
[`yahoo` not found]

たくさんの接する円があるとします。それらの円の隙間を円で埋めてしまいたくなりますね(なりません)。<パクリ(パクリ元

そんな充填フェチや空隙フォビアの方々に朗報!

前回見た、基本的なパップス・チェーンを第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)

パップス・チェーン(第1次円列)

パップス・チェーン(第1次円列)

第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);

パップス・チェーン(第2次円列)

パップス・チェーン(第2次円列)

第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);

パップス・チェーン(第3次円列その1)

パップス・チェーン(第3次円列その1)

第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次円列その2)

パップス・チェーン(第3次円列その2)

そして第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);

パップス・チェーン(第3次円列その3)

パップス・チェーン(第3次円列その3)

このように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!





WP-SpamFree by Pole Position Marketing