· 

ランダムゲーム(シェルピンスキーのギャスケット)

(著)山たー

まずは下のプログラムを見てほしい。ぼんやり見ているとある形が浮かび上がってくるはずだ

三角形からなる図形が現れるはずである。これはシェルピンスキーのギャスケットと呼ばれる、フラクタル図形の一種である。

アルゴリズムは以下の通り。

(1)正三角形の3頂点A,B,Cをとる

(2)頂点とは異なる点を1点とる(P0とする)

(3)P0とA,B,Cからランダムに選んだ点との中点をとる(P1とする)

(4)同様に、PiとA,B,Cからランダムに選んだ点との中点をとる(Pi+1とする)

以後(4)を繰り返す。

 どうしてこうなるのかざっくり言えば、シェルピンスキーのギャスケット内の点といずれかの頂点との中点もシェルピンスキーのギャスケットの1つの要素になるからである。すなわち、初めのうちはシェルピンスキーのギャスケットの集合Sに入っていないが、ある点がS内に入れば、それ以降の点もSに属するというわけである。

ソースコード

float x,y;
int count=0;
void setup(){
  size(500,400);
  background(255);
  point(250,20);
  point(42,380);
  point(458,380);
  x=random(0,width);
  y=random(0,height);
  point(x,y);
}
void draw(){
  int tmp=int(random(0,3));
  if(tmp==0){
    x=(x+250)/2;
    y=(y+20)/2;
  }else if(tmp==1){
    x=(x+42)/2;
    y=(y+380)/2;
  }else if(tmp==2){
    x=(x+458)/2;
    y=(y+380)/2;
  }
  point(x,y);
  count+=1;
  fill(0);
  textAlign(RIGHT);
  textSize(30);
  text("N=",50,50);
  noStroke();
  fill(255);
  rect(52,25,130,80);
  fill(0);
  text(count,180,52);
  stroke(1);
}