2023年9月28日 星期四

WW-Week03_隨機連線小球_點線面_彩虹

第一節課

第一個小程式week03_1

SEPT 1.畫一個小點,設視窗大小500*500,點的位置放在畫面中心250*250位置大小5*5
///sept1.點線面
void setup(){
  size(500,500);
}
float x=250,y=250;
void draw(){
  ellipse(x,y,5,5);
}

SEPT 2. 加入dx,dy畫出一條線從中點往右下方畫線
///sept1.點線面
void setup(){
  size(500,500);
}
float x=250,y=250;
float dx=1,dy=1;
void draw(){
  ellipse(x,y,5,5);
  x+=dx;
  y+=dy;
}

第二個小程式week03_2_background_random

SEPT 3.設背景為黑色,加入亂數,讓小球隨機跑遇到牆壁時往回彈

void setup(){
  size(500,500);
  dx = random(-1,+1);
  dy = random(-1,+1);//亂數決定往哪裡跑
}
float x=250,y=250;
float dx=1,dy=1;
void draw(){
  background(0);
  ellipse(x,y,5,5);
  x+=dx;
  y+=dy;
  if(x<0 || x>500)dx = -dx;
  if(y<0 || y>500)dy = -dy;
}

 第三個小程式week03_3_array_forloop

SEPT 4.用迴圈和陣列將隨機跑的小點變很多個

void setup(){
  size(500,500);
  for(int i=0; i<20; i++){
    x[i] = random(500);
    y[i] = random(500);
    dx[i] = random(-1,+1);
    dy[i] = random(-1,+1);//亂數決定往哪裡跑
  }
}
float [] x = new float[20];
float [] y = new float[20];
float [] dx = new float[20];
float [] dy = new float[20];
void draw(){
  background(0);
   for(int i=0; i<20; i++){
      ellipse( x[i], y[i], 5, 5);
      x[i] += dx[i];
      y[i] += dy[i];
      if(x[i]<0 || x[i]>500)dx[i] = -dx[i];
      if(y[i]<0 || y[i]>500)dy[i] = -dy[i];
   }
}

 第四個小程式week03_4_near_line

SEPT 5.當小球靠很近的時候連線
void setup(){
  size(500,500);
  for(int i=0; i<20; i++){
    x[i] = random(500);
    y[i] = random(500);
    dx[i] = random(-1,+1);
    dy[i] = random(-1,+1);//亂數決定往哪裡跑
  }
}
float [] x = new float[20];
float [] y = new float[20];
float [] dx = new float[20];
float [] dy = new float[20];
void draw(){
  background(0);
  for(int i=0; i<20; i++){
     ellipse( x[i], y[i], 5, 5);
     for(int k=0; k<20; k++){
       stroke(255,0,0);//如果很近的話,畫線
       if(dist(x[i],y[i], x[k],y[k])<100)//dist距離小於100
         line(x[i],y[i], x[k],y[k]);//將兩顆相近的點連起來
     }
     x[i] += dx[i];
     y[i] += dy[i];
     if(x[i]<0 || x[i]>500)dx[i] = -dx[i];
     if(y[i]<0 || y[i]>500)dy[i] = -dy[i];
   }
}
第二節課
第五個小程式
week03_5_stroke_arrary_size
SEPT 6.增加點數量,改線顏色越近越亮越遠越暗
void setup(){
  size(500,500);
  for(int i=0; i<N; i++){
    x[i] = random(500);
    y[i] = random(500);
    dx[i] = random(-1,+1);
    dy[i] = random(-1,+1);//亂數決定往哪裡跑
  }
}
int N = 40;///讓點變多
float [] x = new float[N];
float [] y = new float[N];
float [] dx = new float[N];
float [] dy = new float[N];
void draw(){
  background(0);
  for(int i=0; i<N; i++){
     ellipse( x[i], y[i], 5, 5);
     for(int k=0; k<N; k++){
       float d= dist(x[i],y[i],x[k],y[k]);
       stroke(2.55*(100-d));//stroke色彩//2.55*100最亮//2.55*0最暗
       if(d<100)//dist距離
         line(x[i],y[i], x[k],y[k]);
     }
     x[i] += dx[i];
     y[i] += dy[i];
     if(x[i]<0 || x[i]>500)dx[i] = -dx[i];
     if(y[i]<0 || y[i]>500)dy[i] = -dy[i];
   }
}
第六個小程式week03_6_attraction
SEPT 7.讓小點彼此之間加一點吸引力
void setup(){
  size(500,500);
  for(int i=0; i<N; i++){
    x[i] = random(500);
    y[i] = random(500);
    dx[i] = random(-1,+1);
    dy[i] = random(-1,+1);//亂數決定往哪裡跑
  }
}
int N = 40;///讓點變多
float [] x = new float[N];
float [] y = new float[N];
float [] dx = new float[N];
float [] dy = new float[N];
void draw(){
  background(0);
  for(int i=0; i<N; i++){
     ellipse( x[i], y[i], 5, 5);
     for(int k=0; k<N; k++){
       float d= dist(x[i],y[i],x[k],y[k]);
       stroke(2.55*(100-d));//stroke色彩//2.55*100最亮//2.55*0最暗
       if(d<100)//dist距離
         line(x[i],y[i], x[k],y[k]);
         dx[i] += (x[k]-x[i])*0.00001;
         dx[i] += (y[k]-y[i])*0.00001;
     }
     x[i] += dx[i];
     y[i] += dy[i];
     if(x[i]<0 || x[i]>500)dx[i] = -dx[i];
     if(y[i]<0 || y[i]>500)dy[i] = -dy[i];
   }
}

第三節課
在Processing內有一些範例Book可以下載
根據課本裡面的範例
第七個小程式week03_7_colorMode_HSB_frameCount
想做一個彩虹 
Step1.開啟色彩選擇器
Step2.挑一個顏色顯示出來
Step3. colorMode(HSB,360,100,100);製作漸變的彩虹
void setup(){
  size(500,500);
  colorMode(HSB,360,100,100);///H:360度,S:0-100%,B:0-100%
}
void draw(){
  background(frameCount%360,27,96);
}



第八個小程式week03_8_colorMode_HBS_stroke_point
想畫出彩虹,用HSB座標色彩系統colorMode
size(400,400);
colorMode(HSB,400);
for(int i=0; i<400; i++){///
  for(int j=0; j<400; j++){///J飽和度
    stroke(i,400,400);//顏色,最後是亮度
    point(i,j);
  }
}
stroke(i,400,200);

第九個小程式week03_9_
STEP1. 畫出5*5圓圈圈,和上背景色

機上隨機色,隨機改變HSB的顏色每次執行都不一樣
void setup(){
  size(300,300);
  colorMode(HSB,360,100,100);
  chooseColor();
}
float h,s,b;
void chooseColor(){
  h =random(360);
  s =random(100);
  b =random(100);
}
void draw(){
  background(213,27,96);
  for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
      fill(h,s,b);
      ellipse(30+j*60,30+i*60,60,60);
    }
  }
}
STEP 2. 滑鼠按下去改變顏色
void setup(){   size(300,300);   colorMode(HSB,360,100,100);   chooseColor(); } void mousePressed(){   chooseColor();///按滑鼠時改變顏色 } float h,s,b; void chooseColor(){   h =random(360);   s =random(50,100);   b =random(50,100);///設定範圍以免顏色太醜 } void draw(){   background(213,27,96);   for(int i=0;i<5;i++){     for(int j=0;j<5;j++){       fill(h,s,b);       ellipse(30+j*60,30+i*60,60,60);     }   } }
STEP 3. 設定其中一個圓圈顯示的跟別人不一樣
void setup(){   size(300,300);   colorMode(HSB,360,100,100);   chooseColor(); } void mousePressed(){   chooseColor();///按滑鼠時改變顏色 } int I,J; float h,s,b,dh,ds,db; void chooseColor(){   h =random(360);   s =random(50,100);   b =random(50,100);///設定範圍以免顏色太醜   I=int(random(5));   J=int(random(5));   dh=random(-10,+10);   ds=random(-10,+10);   db=random(-10,+10); } void draw(){   background(213,27,96);   for(int i=0;i<5;i++){     for(int j=0;j<5;j++){       if(i==I && j==J)fill(h+dh,s+ds,b+db);       else
      ellipse(30+j*60,30+i*60,60,60);     }   } }


沒有留言:

張貼留言