close

恩恩恩~~~~看到強者學弟  "阿亂"  在部落格上面PO自己 PD的使用心得~

害我心養養的    這是他的網站  http://kickowang.blogspot.com/

 

呵呵那我也來寫一下Processing  最近使用的東西吧

 

先show個圖Ball_Picture1.bmp

 

恩恩~~~~在來是程式碼的部分

 

 

int Ball_Number = 100;                                                    //首先呢   先把圓形的個數設定為 100個


float Ball_Position_X[] = new float[Ball_Number];           // 圓形的x座標
float Ball_Position_Y[] = new float[Ball_Number];           // 圓形的y座標
float Ball_Velocity_X[] = new float[Ball_Number];           // 圓形的x方向速度
float Ball_Velocity_Y[] = new float[Ball_Number];           // 圓形的y方向速度
float Ball_Accuracy_X[] = new float[Ball_Number];         // 圓形的x方向加速度
float Ball_Accuracy_Y[] = new float[Ball_Number];         // 圓形的y方向加速度    噗噗
int Ball_Radius[] = new int[Ball_Number];                      // 這個則是每個圓形的半徑,  到後面會隨著程式的進行越來越小~

int Count = 0;                                                                 // 記數器    哈哈, 等等會用做每經過六次  圓的半徑就少一


void setup()            //主要程式執行部份
{
  size(800,800);     //設定畫面大小為 800X800
  background(0);    //背景黑色
  smooth();             // 畫面平滑  >/////////<
  frameRate(30);    //每秒更新速率設定為 每秒更新30次~
 
  for(int i = 0; i < Ball_Number; i++)                //初始化球的一些狀態
  {
    Ball_Position_X[i] = random(0,width);      
    Ball_Position_Y[i] = random(0,height);
    Ball_Velocity_X[i] = random(-1,1);
    Ball_Velocity_Y[i] = random(-1,1);
    Ball_Accuracy_X[i] = 0;
    Ball_Accuracy_Y[i] = 0;
    Ball_Radius[i] = (int)(random(0,20)+40);
  }
}

void draw()
{
  for(int i = 0; i < Ball_Number; i++)                //   更新每個球
  {
    if(Ball_Radius[i] > 1)                                   //   如果球的半徑大於1的話才做下面的這些事~
    {
      Ball_Accuracy_X[i] = (mouseX - Ball_Position_X[i])/
      sqrt(sq(mouseX-Ball_Position_X[i])+sq(mouseY-Ball_Position_Y[i]))*0.006;   //首先先算出球對滑鼠單位向量的X分量   之後乘以0.006   當作X方向加速度
    
      Ball_Accuracy_Y[i] = (mouseY - Ball_Position_Y[i])/
      sqrt(sq(mouseX-Ball_Position_X[i])+sq(mouseY-Ball_Position_Y[i]))*0.006;    //  再算出單位向量的Y分量    之後乘以0.006   當作Y方向加速度

    
      Ball_Velocity_X[i] = Ball_Velocity_X[i] + Ball_Accuracy_X[i];                              // 物理公式   哈哈
      Ball_Velocity_Y[i] = Ball_Velocity_Y[i] + Ball_Accuracy_Y[i];                               
    
      Ball_Position_X[i] = Ball_Position_X[i] +Ball_Velocity_X[i];                                
      Ball_Position_Y[i] = Ball_Position_Y[i] +Ball_Velocity_Y[i];                                 
 
      fill(Ball_Radius[i]*10,255-Ball_Radius[i]*3,Ball_Radius[i]*5);                            // 顏色也會隨著半徑改變噢
      
      ellipse(Ball_Position_X[i],Ball_Position_Y[i],Ball_Radius[i],Ball_Radius[i]);         // 畫出球來
    }
  }
 
  Count ++;                                              // 每一次 count 都加一
  if(Count > 6)                                          // 但是當他大於六的時候
  {
    Count = 0;                                           // 就規零
    for(int i = 0; i < Ball_Number; i++)      
    {
      if( Ball_Radius[i] > 1 )
      {
        Ball_Radius[i] = Ball_Radius[i]-1;     //然後球的半徑減一,直到他的半徑小於一
      }
    }
  }
}


arrow
arrow
    全站熱搜

    soulblighter 發表在 痞客邦 留言(0) 人氣()