【发布时间】:2016-11-22 22:40:03
【问题描述】:
我已尝试找到与我类似的错误以避免提出已经重复的问题,但我找不到任何东西。我很抱歉代码很长。如果有人可以向我解释我做错了什么,我将不胜感激。提前致谢。
// Physical Constants
float g=-9.81; // Gravity
float k=0.0; // Friction const (Try 0.02)
float m=0.25; // Mass kg
float dt=0.01; // Time step 10ms
// Boundary (starting) conditions
float vy=0; // Initial vertical velocity
float y=0.9; // Initial vertical position
float x=0; // Initial horizontal position
float vx=0.8; // Initial horizontal velocity
float t=0; // Initial time
Ball [] b;
void setup()
{
b=new Ball[50];
for(int i=0;i<50;i++)
{
b[i]=new Ball();
}
size(500, 500);
}
void draw()
{
background(255);
for(int i=0;i<50;i++)
{
b[i].advance();
b[i].draw_ball();
}
}
int Collision(int j,Ball b[])
{
int res=-1;
for(int i=0;i<50;i++)
{
if (i!=j)
{
float sep=sqrt(pow(b[i].x-b[j].x,2)+pow(b[i].y-b[j].y,2));
float rads=b[i].radius+b[j].radius;
if(sep<rads){ res=i;}
}
}
return(res);
}
class Ball
{
color c;
float radius;
float vy;
float y;
float x;
float vx;
float t;
Ball()
{
y=random(0.1,0.9);
vy=random(-1,1);
x=random(0.1,0.9);
vx=random(-1,1);
c=color(random(255),random(255), random(255));
radius = 0.01+random(0.04);
t=0;
}
void advance()
{
vy=vy+(g-((k/m)*vy))*dt;
y=y+(vy*dt);
vx=vx+(-((k/m)*vx))*dt;
x=x+(vx*dt);
t=t+dt;
if (y<=0) {vy=-vy; y=y+(vy*dt);}
if (x<=0) {vx=-vx; x=x+(vx*dt);}
if (x>=1) {vx=-vx; x=x+(vx*dt);}
}
{
b[i].advance();
int r=Collision(i,b); // Check if ball i collides with any balls in array b
if(r!=-1) // -1 means no collision, r is index that identifies ball in b
{
float nvxj = (b[i].vx * (b[i].radius - b[r].radius) + (2 * b[r].radius * b[r].vx)) /
(b[i].radius + b[r].radius);
float nvyj = (b[i].vy * (b[i].radius - b[r].radius) + (2 * b[r].radius * b[r].vy)) /
(b[i].radius + b[r].radius);
float nvxr = (b[r].vx * (b[r].radius - b[i].radius) + (2 * b[i].radius * b[i].vx)) /
(b[i].radius + b[r].radius);
float nvyr = (b[r].vy * (b[r].radius - b[i].radius) + (2 * b[i].radius * b[i].vy)) /
(b[i].radius + b[r].radius);
b[i].vx=nvxj;
b[i].vy=nvyj;
b[r].vx=nvxr;
b[r].vy=nvyr;
}
b[i].draw_ball();
void draw_ball()
{
float sx=map(x,0,1,0,width);
float sy=map(y,0,1,height-1,0);
float rx=map(radius,0,1,0,width);
float ry=map(radius,0,1,0,height);
fill(c);
ellipse(sx,sy,2*rx,2*ry);
}
}
【问题讨论】:
-
哪一行给你这个错误?
标签: processing