Back to index

 

 

その先の話:アポロニアンガスケット

 

図2のような作業を続けてゆくとどうなるか、一例を次に示す。

 

図3

 

最初に描いた2個の円の位置と大きさによって異なった結果になる。円と円の間隙はさらに小さい円で埋め尽くしてゆくことができるが、かなりの根気が必要であるし、ルールの変更が必要となる。つまりここでは、図1で描いた円以外はすべて外側の円と接触していないといけないというルールでここまでを描いたが、これ以上埋めてゆくには、このルールをやめて、3個の円と接触していれば良いことにしなければ、中側の空間を埋め尽くすことは出来なくなる。

 

図3に示したのは、著者が遊び心で描いた円の模様であるが、実はギリシャ時代の数学者アポロニアス(Appolonius)が考案したアポロニアンガスケット(Appolonian

Gasket)と呼ばれるフラクタルの変形である。アポロニアンガスケットには美しい対称性をもったフラクタル多数あるが、その中の1個を紹介する。ただし、著者のプログラムは完全自動化はしていないので、半径が無限にゼロに近い円は描いおらず、その意味で不完全である。

 

          

図4 アポロニアンガスケットの例(未完成)

 

使用したプログラムは次に示してある。このプログラムの完成、あるいは自動化は読者に委ねたい。原稿を送っていただけたら、本稿の続きに寄稿者の名前入りの掲載を約束する。

 

%appolo2.m

clf;

figure(1);

x0=0; y0=0; r0=4;

w0(1)=x0; w0(2)=y0;, w0(3)=r0;

circle_(x0,y0,r0);hold on

r3_initial=1;

x1=2; y1=0; r1=2;

w1(1)=x1; w1(2)=y1;, w1(3)=r1;

circle_(x1,y1,r1)

w2(1)=-2; w2(2)=y1; w2(3)=r1;

circle_(w2(1),w2(2),w2(3))

r3_initial=2

w3=tan_cir(w0,w1,w2, r3_initial,0,2)

   circle_(w3(1),-w3(2),w3(3))

zs1=space_3c(w3,w1,w2, 0.1, 0,1)  

 zs11=space_3ctest(zs1,w1,w2, 0.002, 0, 0.6) 

 zs13=space_3ctest(zs1,w1,w3, 0.002, 0.1, 0.1) 

 zs23=space_3ctest(zs1,w2,w3, 0.002, -0.1, 0.1)

    circle_(zs1(1),-zs1(2),zs1(3))

      circle_(zs13(1),-zs13(2),zs13(3))

         circle_(zs11(1),-zs11(2),zs11(3))

            circle_(zs23(1),-zs23(2),zs23(3))          

 w134=space_3ctest(w4,w1,w3, 0.1, 1.7, 2)            

   circle_(w134(1),-w134(2),w134(3))

     circle_(-w134(1),w134(2),w134(3))

       circle_(-w134(1),-w134(2),w134(3))

w4=tan_cir(w0,w1,w3, 1,2,2.5)

  w34=tan_cir(w0,w4,w3, 0.5,1.5,3.2)

   circle_(w34(1),-w34(2),w34(3))

   circle_(w4(1),-w4(2),w4(3))

      circle_(-w34(1),-w34(2),w34(3))

   circle_(-w4(1),-w4(2),w4(3))

      circle_(-w34(1),w34(2),w34(3))

   circle_(-w4(1),w4(2),w4(3))

w1341=tan_cir(w0,w34,w3, 0.25,1.,3.

circle_(w1341(1),-w1341(2),w1341(3))

 circle_(-w1341(1),w1341(2),w1341(3))

  circle_(-w1341(1),-w1341(2),w1341(3))

w13411=tan_cir(w0,w1341,w3, 0.15,0.7,3.8)

circle_(w13411(1),-w13411(2),w13411(3))

 circle_(-w13411(1),w13411(2),w13411(3))

  circle_(-w13411(1),-w13411(2),w13411(3)) 

w5=tan_cir(w0,w1,w4, 1,3,2)

  w45=tan_cir(w0,w5,w4, 0.4,2.5,2.6)

  circle_(w5(1),-w5(2),w5(3))

  circle_(w45(1),-w45(2),w45(3))

  circle_(-w5(1),-w5(2),w5(3))

  circle_(-w45(1),-w45(2),w45(3))

  circle_(-w5(1),w5(2),w5(3))

  circle_(-w45(1),w45(2),w45(3))   

w6=tan_cir(w0,w1,w5, 0.7,3.5,2)

   circle_(w6(1),-w6(2),w6(3))

      circle_(-w6(1),-w6(2),w6(3))

         circle_(-w6(1),w6(2),w6(3))

w7=tan_cir(w0,w1,w6, 0.4,3.8,1.8)

   circle_(w7(1),-w7(2),w7(3))

      circle_(-w7(1),-w7(2),w7(3))

         circle_(-w7(1),w7(2),w7(3))

w8=tan_cir(w0,w1,w7, 0.2,3.8,1.6)

   circle_(w8(1),-w8(2),w8(3))

      circle_(-w8(1),-w8(2),w8(3))

         circle_(-w8(1),w8(2),w8(3))

w9=tan_cir(w0,w1,w8, 0.15,3.9,1.2)

   circle_(w9(1),-w9(2),w9(3))

     circle_(-w9(1),-w9(2),w9(3))

      circle_(-w9(1),-w9(2),w9(3))

%%%%%%%%%%%%%%%%%%%%%%%%%%%

function a=circle_(xc, yc, r)

%xc=1;yc=1;r=1;

dth=pi/500;

th=0:dth:pi*2;

x=r*cos(th)+ xc;

y=r*sin(th)+ yc;

plot(x,y);

axis square

%%%%%%%%%%%%%%%%%%%%%%%%%%%

function w=tan_cir(w0,w1,w2, r3_initial, xg,yg)

x0=w0(1); y0=w0(2); r0=w0(3)

for m=1:5

x1=w1(1); y1=w1(2); r1=w1(3); r3=r3_initial;

circle_(x1,y1,r1);

%circle_dot(x1,y1,r1+r3)

x2=w2(1); y2=w2(2); r2=w2(3);

circle_(x2,y2,r2)

%circle_dot(x2,y2,r2+r3)

axis([-3 8 -5 5])

x=xg; y=yg;

for itr=1:5

r1d=r1+r3; r2d=r2+r3;

a(1,1)=2*(x-x1); a(1,2)=2*(y-y1); b(1)=r1d^2 - (x-x1)^2 - (y-y1)^2;

a(2,1)=2*(x-x2); a(2,2)=2*(y-y2); b(2)=r2d^2- (x-x2)^2 - (y-y2)^2;

s=a\b';

x=x+s(1);

y=y+s(2);

%[x,y,itr]

end

%line([x,x0], [y,y0])

EL=sqrt( (x-x0)^2 + (y-y0)^2);

 r3n=0.5*r3+0.5*( r0-EL);

 r3_initial=r3n;

 %fprintf('[r0,EL,r3,r3n, r0-EL]');[r0,EL,r3,r3n, r0-EL]

 end

 w(1)=x; w(2)=y; w(3)=r3n;%[w, 999]

 circle_(x,y,r3)

%%%%%%%%%%%%%%%%%%%%%%%%%%%

function w=space_3ctest(w0,w1,w2, r3_initial, xg,yg)

x0=w0(1); y0=w0(2); r0=w0(3)

for m=1:10

x1=w1(1); y1=w1(2); r1=w1(3); r3=r3_initial;

circle_(x1,y1,r1);

%circle_dot(x1,y1,r1+r3)

x2=w2(1); y2=w2(2); r2=w2(3);

circle_(x2,y2,r2)

%circle_dot(x2,y2,r2+r3)

axis([-3 8 -5 5])

x=xg; y=yg;

for itr=1:5

r1d=r1+r3; r2d=r2+r3;

a(1,1)=2*(x-x1); a(1,2)=2*(y-y1); b(1)=r1d^2 - (x-x1)^2 - (y-y1)^2;

a(2,1)=2*(x-x2); a(2,2)=2*(y-y2); b(2)=r2d^2- (x-x2)^2 - (y-y2)^2;

s=a\b';

x=x+s(1);

y=y+s(2);

%[x,y,itr]

end

%line([x,x0], [y,y0])

EL=sqrt( (x-x0)^2 + (y-y0)^2);

 r3n=r3+0.25*( EL-r0-r3);

 r3_initial=r3n;

 %fprintf('[r0,EL,r3,r3n, r0-EL]');[r0,EL,r3,r3n, EL-r0]

 end

 w(1)=x; w(2)=y; w(3)=r3n;%[w, 999]

 circle_(x,y,r3n)

 %%%%%%%%%%%%%%%%%%%%%%%%%%%

function w=space_3c(w0,w1,w2, r3_initial, xg,yg)

x0=w0(1); y0=w0(2); r0=w0(3)

for m=1:5

x1=w1(1); y1=w1(2); r1=w1(3); r3=r3_initial;

circle_(x1,y1,r1);

%circle_dot(x1,y1,r1+r3)

x2=w2(1); y2=w2(2); r2=w2(3);

circle_(x2,y2,r2)

%circle_dot(x2,y2,r2+r3)

axis([-3 8 -5 5])

x=xg; y=yg;

for itr=1:5

r1d=r1+r3; r2d=r2+r3;

a(1,1)=2*(x-x1); a(1,2)=2*(y-y1); b(1)=r1d^2 - (x-x1)^2 - (y-y1)^2;

a(2,1)=2*(x-x2); a(2,2)=2*(y-y2); b(2)=r2d^2- (x-x2)^2 - (y-y2)^2;

s=a\b';

x=x+s(1);

y=y+s(2);

%[x,y,itr]

end

%line([x,x0], [y,y0])

EL=sqrt( (x-x0)^2 + (y-y0)^2);

 r3n=0.5*r3+0.5*( EL-r0);

 r3_initial=r3n;

fprintf('[r0,EL,r3,r3n, r0-EL]');[r0,EL,r3,r3n, r0-EL]

 end

 w(1)=x; w(2)=y; w(3)=r3n;%[w, 999]

 circle_(x,y,r3n)