2011/07/12

Math 4 : Random (processing教學)

Math 4的主題大概是我唯一不會排斥的數學篇吧
因為它主要講的是random! 最喜歡隨機囉!                     嫁雞隨機(好笑嗎?)

但這篇的p130-132還同時介紹到noise,我不太懂它的原理,
這要在請教CCC之後再補上給大家.
因為random實在太無腦(合我胃口)了, 所以這會是一篇輕鬆寫意又香又短的一篇. :))))))

----------------------------------------------------------------------------------------------------------

基本上random的相關指令只有兩個,
random()
randomSeed()

基本上random()就是隨機,你可以給它任一範圍,
例如0到100就是random(100),如果是有個特別間距如50到80就是random(50,80),
random的性質預設是float的,所以當你如果是要它random是整數時
得寫成int (random()),這樣結果出來就是隨機的整數,端看性質需求

而random你說它是真的隨機亂數嗎,其實答案是一半一半,
其實它只是不同的排列組合,只是每次顯示出的排列組合不一樣,
random(10)跟random(1000)的排列組合數當然是天差地遠.
而randomSeed就是為了確保當我們有需要特定組合的時候的產物

拿簡單的123排列好了,有六種組合,而processing裡都幫每一種組合編好了號.
  1        2        3        4        5        6
123    132    213    231    312    321
如果我們打int(random(6)),那只是告訴processing請隨意拿6種可能的其中一種出來即可
但如果打randomSeed(4),那就是告訴processing請拿6種來列組合裡的編號4出來,也就是231

因為random對我來說實在是密不可分,所以前面大家應該也都看慣了,
就直接跳到p130的15-07來做介紹了.


size(200,200);
background(255);
stroke(150,60);
smooth();

int s = 5;
randomSeed(s); //這裡就是定義我要拿編號5的排列組合出來,你填一億也沒人管你

for(int i = 0; i < 100; i++){
  float r = random(10);
  strokeWeight(r);  //線粗是隨機的1到10
  float offset = r * 15;
  line(i-5,200,i+offset,0);
}

//saveFrame("p130-##.jpg");

random以我好同學小鉄的說法就是簡單到翻跟斗,
這讓我們在有規則的排列內找到一些不規則的表現法,
所以之前學的矩陣排列除了顏色之外,也可以有不同形狀的變化.




size(200,200);
background(200);
smooth();


for(int x = 5; x < width; x += 10){
  for(int y = 5; y < height; y += 10){
   
    int r = int(random(100)); //先給一個隨機數
   
    if((r < 66) && (r > 33)){  //當隨機數介於34~65之間時,畫白圓
      noStroke();
      fill(255);
      ellipseMode(CENTER);
      int q = int(random(2,8));
      ellipse(x,y,q,q);
    }
   
    else if(r <= 33){  //當隨機數小於34時,畫黃圓
      noStroke();
      fill(255,255,0);
      ellipseMode(CENTER);
      int k = int(random(2,8));
      ellipse(x,y,k,k);
    }
   
    else{  //除了上述範圍外的其他數時,畫綠圓
      noStroke();
      fill(0,255,0);
      ellipseMode(CENTER);
      int a = int(random(2,8));
      ellipse(x,y,a,a);
    }
  }
}


//saveFrame("p132-2-##.jpg");

//這概念就是每當要畫一次圓時,會跑出一個介於1到100的隨機數
//而這隨機數再經過下面三個if的檢查來決定要畫什麼顏色的圓


Try it. :)

沒有留言:

張貼留言