processing練手

簡單實現相同小球的相互簡單撞擊(對側擊進行簡化),並實現邊界限制,恆定阻力。


int index=0,jndex=0;
int collision;
float [] pointx={256,512,768,1024,1280,256,512,768};
float [] pointy={456,345,18,1280-480,1024-480,768-480,512-480,256,1280-480};
PVector [] v={new PVector (100,100),new PVector (110,-110),new PVector (-120,-120),new PVector (-140,130),new PVector (140,0),new PVector (0,150),new PVector (-160,0),new PVector (0,-170)};
float t=0.09;
void setup(){
  size(1280,800);
  stroke(2);
  smooth();

}

void draw(){
  background(500);
  //fill(520);
  fill(#FFFFE0);
   for(index=0;index<8;index++)
     ellipse(pointx[index],pointy[index],20.0,20.0);
     //noStroke();
     for(index=0;index<8;index++)
     {
      v[index].x*=0.999;
      v[index].y*=0.999;
     }
     noStroke();
   for(index=0;index<8;index++)
  { 
    if(pointx[index]<=20||pointx[index]>=1280) {v[index].x=-v[index].x; if(pointx[index]<=20) pointx[index]=30; else pointx[index]=1270; } 
    if(pointy[index]<=20||pointy[index]>=800)  {v[index].y=-v[index].y; if(pointy[index]<=20) pointy[index]=30 ; else pointy[index]=790;}

  }  
  for(index=0;index<8;index++)
  {
    pointx[index]+=v[index].x*t;
    pointy[index]+=v[index].y*t;
  }
  for(index=0;index<8;index++)
  {
   for(jndex=index+1;jndex<8;jndex++)
   {
     float dist=sqrt((pointx[index]-pointx[jndex])*(pointx[index]-pointx[jndex])+(pointy[index]-pointy[jndex])*(pointy[index]-pointy[jndex]));
     if (dist<30.0)
     {  fill(#FF0000);
       ellipse(pointx[index],pointy[index],10,10);
             ellipse(pointx[jndex],pointy[jndex],10,10);
      PVector temp=new PVector(1,1);
      temp=v[index];
      v[index]=v[jndex];
      v[jndex]=temp;
      collision++;
     }
     text("c o l l i s i o n : "+collision,20,20);
   }
  }


}


草稿版,大概看出寫的過程與相關的debug,以實現情況的轉化。
反省:沒有將小球對象化,不能脫離c的束縛。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章