2016-11-22 6 views
0

私はすでに質問を繰り返すことを避けるために私と同じようなエラーを見つけようとしましたが、何も見つかりませんでした。コードがかなり長かったことをお詫び申し上げます。私が何をやっているのか誰かが私に説明することができたら、私はそれを高く評価します。前もって感謝します。あなたのインデントを修正する場合は、より良い{ }中括弧を一致させることができるように処理中 - 変数 'i'は存在しませんか?

// 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); 
} 

} 
+0

このエラーはどのラインで発生しますか? –

答えて

1

あなたはより良い運を持っています。

はあなたが advance()機能を持っているが、その後、右、その関数が終了(中括弧を閉じるマッチングを見つける。)した後、あなたがこのコードの切断スニペットを持って

{ 
    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); 
    } 
    } 

がたくさんありますここに行く。 { }中括弧内にコードブロックを入れるのは構文エラーではありませんが、このコードが何を期待しているのか、それが実行されることを期待しているのか分かりません。しかし、このコードで定義していない変数iを使用していることが原因です。

{ }中括弧内に関数を定義するのは構文エラーです。

問題を解決するには、一歩前進して、このコードセクションがどこに属しているかを本当に考えなければなりません。