(著)山たー
フラクタルな図形を書いてみたシリーズ3。プログラムは、左クリックで階層が一つ増し、右クリックで階層が一つ減る。久しぶりに複素数の回転を使った気がする。
ソースコード
int num=1; float edge=400; float y=130; void setup(){ size(500,500); noLoop(); background(255); } void draw(){ background(255); Disp_Koch(width/2-edge/2,y,width/2+edge/2,y,num); Disp_Koch(width/2+edge/2,y,width/2,y+sqrt(3)*edge/2,num); Disp_Koch(width/2,y+sqrt(3)*edge/2,width/2-edge/2,y,num); } void Disp_Koch(float x1, float y1,float x2, float y2,int num){ stroke(0); line(x1,y1,x2,y2); if(num>1){ stroke(255); strokeWeight(3); strokeCap(SQUARE); line(x1,y1,x2,y2); strokeWeight(1); strokeCap(PROJECT); stroke(0); float x3=(2*x1+x2)/3; float y3=(2*y1+y2)/3; float x4=(x1+2*x2)/3; float y4=(y1+2*y2)/3; float dx=x4-x3; float dy=y4-y3; float x5=x3+dx*cos(-PI/3)-dy*sin(-PI/3); float y5=y3+dx*sin(-PI/3)+dy*cos(-PI/3); Disp_Koch(x1,y1,x3,y3,num-1); Disp_Koch(x3,y3,x5,y5,num-1); Disp_Koch(x5,y5,x4,y4,num-1); Disp_Koch(x4,y4,x2,y2,num-1); } } void mousePressed() { if (mouseButton == LEFT) { num+=1; } else if (mouseButton == RIGHT) { num=max(num-1,0); } redraw(); }
コメントをお書きください