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的束缚。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值