2013年4月17日 星期三

[對照]蝦爸的p5範例 5-1

[Processing Example] 

本週的範例中,蝦爸分享利用遞迴來繪製複雜圖形,遞迴的特性是函數之中可呼叫函數本身,因此透過此功能,我們可以建構複雜、且規律的圖形。

在此範例中按下滑鼠右鍵新增遞迴次數,左鍵則是減少遞迴次數。

[Processing code] ↓

int size;

void setup() {
  size(400, 400,P2D);
  rectMode(CENTER);
  size=0;
}

void draw() {
  background(0);
  stroke(255);
  noFill();
  drawRect(width/2, height/2, 200, size);
}


void drawRect(float px, float py, float r, int i) {
  rect(px, py, r, r);
  if (i>0) {

    drawRect(px-r/2, py-r/2, r/2, i-1);//右上
    drawRect(px-r/2, py+r/2, r/2, i-1);//右下
    drawRect(px+r/2, py-r/2, r/2, i-1);//左上
    drawRect(px+r/2, py+r/2, r/2, i-1);//左下
  }
}

void mouseReleased() {
  if (mouseButton == LEFT) {
    if (size<=4) {
      size=size+1;
    }
  } 
  else if (mouseButton == RIGHT) {
    if (size>=1) {
      size=size-1;
    }
  }
}


[Pd Example]


在pd中,因為[gemhead]傳遞的訊息本來就會累加,所以做法很簡單,只要重複變形、移動的動作即可。

[Pd code] ↓

(square_recusion.pd)


( [pd recursion] )