在procession裡面要做遞迴非常簡單,只需要撰寫幾行程式碼就好,我本以為在pd也會很容易完成,沒想到卻花了整整4天才研究出來........
我一開始用msg的物件去動態產生新的patch去做遞迴,但後來發現動態產生的新的物件並無法直接將數值就嵌在裡面(例如產生新的[drawcircle 100 100 8]後數值load不進來),所以後來才改用將遞迴的過程儲存進陣列裡,然後藉由親子關係去演算得到最終結果。
在做的過程中,深刻感受到pd與processing的差異,也知道自己做這樣的嘗試很可能只是多此一舉,可是內心那把對pd熱愛的火焰,還是逼著自己一定要想出辦法來完成。縱然被景仰的前輩說:”夠了!!STOP!! “。但如果沒有達到我想要的目標,我根本無法停止下來........
以下是是processing的範例
void setup()
--------------------------------------------------------
processing的程式碼真的很短,但是如果是在pd請看以下

差異真的很大吧?!
唉..不過也有很大可能是我功力不夠,所以如果誰有更好的做法,請告知我。
檔案在這裡,請大家試著玩看看吧。檔案下載
我一開始用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請看以下

差異真的很大吧?!
唉..不過也有很大可能是我功力不夠,所以如果誰有更好的做法,請告知我。
檔案在這裡,請大家試著玩看看吧。檔案下載