2010年10月1日 星期五

P5的基本繪圖_5 Recusion

在procession裡面要做遞迴非常簡單,只需要撰寫幾行程式碼就好,我本以為在pd也會很容易完成,沒想到卻花了整整4天才研究出來........

我一開始用msg的物件去動態產生新的patch去做遞迴,但後來發現動態產生的新的物件並無法直接將數值就嵌在裡面(例如產生新的[drawcircle 100 100 8]後數值load不進來),所以後來才改用將遞迴的過程儲存進陣列裡,然後藉由親子關係去演算得到最終結果。

在做的過程中,深刻感受到pd與processing的差異,也知道自己做這樣的嘗試很可能只是多此一舉,可是內心那把對pd熱愛的火焰,還是逼著自己一定要想出辦法來完成。縱然被景仰的前輩說:”夠了!!STOP!! “。但如果沒有達到我想要的目標,我根本無法停止下來........


以下是是processing的範例


void setup()

{
  size(200, 200);
  noStroke();
  smooth();
  noLoop();
}

void draw() 
{
  drawCircle(126, 170, 6);
}

void drawCircle(int x, int radius, int level) 
{                    
  float tt = 126 * level/4.0;
  fill(tt);
  ellipse(x, 100, radius*2, radius*2);      
  if(level > 1) {
    level = level - 1;
    drawCircle(x - radius/2, radius/2, level);
    drawCircle(x + radius/2, radius/2, level);
  }
}


--------------------------------------------------------
processing的程式碼真的很短,但是如果是在pd請看以下



差異真的很大吧?!
唉..不過也有很大可能是我功力不夠,所以如果誰有更好的做法,請告知我。



檔案在這裡,請大家試著玩看看吧。檔案下載