· 

シェルピンスキーのギャスケット

(著)山たー

フラクタルな図形を書いてみたシリーズ1。どれも再起関数を使うので、初めはプログラムの流れが分かりづらい。プログラムは、どれも左クリックで階層が一つ増し、右クリックで階層が一つ減る。前回、ランダムゲームで描いたものと同じ。本来の描き方。

ソースコード

int num=1;

void setup(){
  size(550,500);
  noLoop();
  noStroke();
  background(255);
}

void draw(){
  background(255);
  Disp_Triangle(width/2,20,500,num);
}

void Disp_Triangle(float x, float y, float edge, int num){
  fill(0);
  triangle(x,y,x+edge*sin(PI/6),y+edge*cos(PI/6),x-edge*sin(PI/6),y+edge*cos(PI/6));
  if(num>1){
    fill(255);
    triangle(x,y,x+edge*sin(PI/6),y+edge*cos(PI/6),x-edge*sin(PI/6),y+edge*cos(PI/6));
    float next_edge=edge/2;
    Disp_Triangle(x,y,next_edge,num-1);
    Disp_Triangle(x+next_edge*sin(PI/6),y+next_edge*cos(PI/6),next_edge,num-1);
    Disp_Triangle(x-next_edge*sin(PI/6),y+next_edge*cos(PI/6),next_edge,num-1);
  } 
}

void mousePressed() {
  if (mouseButton == LEFT) {
    num+=1;
  } else if (mouseButton == RIGHT) {
    num=max(num-1,0);
  }
  redraw();
}