レ☆ト☆ロ☆ラ☆ボ

タイトルテスト中

アポロニアン・ガスケットの描き方(1) ー 概要

f:id:sekibunta:20141207181712p:plain f:id:sekibunta:20141207181459p:plain

アポロニアン・ガスケット. 無数の円があり複雑な図形に見えますが, その描き方は意外と簡単です. この記事では, それを紹介したいと思います. (左側の図形を扱いますが, 右側の図形でも考え方はほぼ同じです. 両者は実は同じものです.)

それでは, さっそく描き方を述べたいと思います. アポロニアン・ガスケットは次の2ステップで描くことができます.

1. まず, 円  D の上に3点  A_0 (\cos\alpha,\, \sin\alpha),  B_0 (\cos\beta,\, \sin\beta),  C_0 (\cos\gamma,\, \sin\gamma) をとります. (この記事で円と言えば, 円周を意味するものとします. また, 簡単のために, 円  D は原点中心の単位円とします.) 次に, 互いに接する円  A,  B,  C を, それぞれ点  A_0,  B_0,  C_0 で円  D に接するように描きます. (それぞれの円の中心も  A,  B,  C で表します.)

f:id:sekibunta:20141208124313p:plain f:id:sekibunta:20141208123714p:plain

このとき, 円  A,  B,  C の半径はそれぞれ

\[ r_A = \frac{1}{1 + \sqrt{\frac{2(1-\cos\theta)}{(1-\cos\varphi)(1-\cos\psi)}}}, \]

\[ r_B = \frac{1}{1 + \sqrt{\frac{2(1-\cos\varphi)}{(1-\cos\psi)(1-\cos\theta)}}}, \]

\[ r_C = \frac{1}{1 + \sqrt{\frac{2(1-\cos\psi)}{(1-\cos\theta)(1-\cos\varphi)}}} \]

で与えられます. これらを用いると, 円  A,  B,  C の中心は,

\[ (A_x,A_y) = (1-r_A) (\cos\alpha,\, \sin\alpha), \]

\[ (B_x,B_y) = (1-r_B) (\cos\beta,\, \sin\beta), \]

\[ (C_x,C_y) = (1-r_C) (\cos\gamma,\, \sin\gamma) \]

により計算できます.

2. 4つの "反転円"  A',  B',  C',  D' を補助的に描きます.

f:id:sekibunta:20141208005249p:plain f:id:sekibunta:20141208005304p:plain

 D' は三角形  ABC の内接円であり, その中心と半径は,

\[ (D'_x,D'_y) = \left(\frac{aA_x+bB_x+cC_x}{a+b+c}, \frac{aA_y+bB_y+cC_y}{a+b+c}\right),\, r_{D'} = \frac{2S}{a+b+c} \]

で与えられます( S は三角形  ABC の面積). また, 円  A' は点  B_0,  C_0 を通り円  D に直交する円であり(円  B',  C' についても同様), その中心と半径は,

\[ (A'_x,A'_y) = \left(\frac{\sin\beta - \sin\gamma}{\sin(\beta-\gamma)}, -\frac{\cos\beta - \cos\gamma}{\sin(\beta-\gamma)} \right),\, r_{A'} = \left|\frac{1 - \cos(\beta-\gamma)}{\sin(\beta-\gamma)}\right|, \]

\[ (B'_x,B'_y) = \left(\frac{\sin\gamma - \sin\alpha}{\sin(\gamma-\alpha)}, -\frac{\cos\gamma - \cos\alpha}{\sin(\gamma-\alpha)} \right),\, r_{B'} = \left|\frac{1 - \cos(\gamma-\alpha)}{\sin(\gamma-\alpha)}\right|, \]

\[ (C'_x,C'_y) = \left(\frac{\sin\alpha - \sin\beta}{\sin(\alpha-\beta)}, -\frac{\cos\alpha - \cos\beta}{\sin(\alpha-\beta)} \right),\, r_{C'} = \left|\frac{1 - \cos(\alpha-\beta)}{\sin(\alpha-\beta)}\right| \]

で与えられます. 次に, これらの反転円  A',  B',  C',  D' に関して, 円  A,  B,  C,  D を次々と反転させます. ここで, 反転円  I に関する反転とは, 下の図のように, 円  S から円  T を得る操作のことです.

f:id:sekibunta:20141208132912p:plain

\[ (T_x,T_y) = \frac{r_I^{2}}{d^{2} - r_S^{2}} (S_x, S_y),\quad r_T = \left|\frac{r_I^{2}}{d^{2} - r_S^{2}} \right| \, r_S \]

例えば円  D を反転させる場合, まず反転円  D' に関して反転をとります. それ以降は  A',  B',  C',  D' のどれに関して反転をとってもよいのですが, 同じ反転円を続けて選ばないようにします. (同じ反転を2回繰り返すと元に戻るからです.) 下は一例です.

f:id:sekibunta:20141208024357p:plain

以上で描き方の説明を終わります. 上記の方法をまとめると,

 「最初の3つの円と4つの反転円さえ知れば, アポロニアン・ガスケットに現れる無数の円が描ける」

ということになります. 実際には全ての円を描くことはできないので, 反転の回数の上限を決める, あるいは円の半径の下限を決める, などの制限をつけて描くことになります. 記事中で述べた数式の導出と, この方法でアポロニアン・ガスケットが描かれる理由については, 今後何回かに分けて説明を加えたいと思います.