(Created page with "''Der Denkfehler ist behoben. Jetzt ist es fast perfekt. Naja, wenn der Ball gegen die Laufrichtung abprallt, läuft er auf seiner Kreisbahn Richtung Decke weiter. Die physikalis...")
 
Line 3: Line 3:
 
== Code B ==
 
== Code B ==
  
 +
Ball[] ball = new Ball[15];
 +
int a,b,c; //Abstände der Ebenen
  
 +
void setup() {
 +
  size(1280,1024);
 +
  //size(1920,1200);
 +
  smooth();
 +
  noStroke();
 +
  colorMode(HSB,360,100,100,100);
 +
 
 +
  a = 500; //700 Größe der ersten Ebene
 +
  b = 400; //600 Größe der zweiten Ebene
 +
  c = 40; //60 Lücke
 +
 
 +
  for (int i=0; i < 5; i++) {
 +
    ball[i] = new Ball();
 +
    //in erster Ebene
 +
    ball[i].x = random(ball[i].g1,a-ball[i].g1);
 +
    ball[i].y = random(ball[i].g2,height-ball[i].g2);
 +
    //Farbe
 +
    ball[i].h = (int)random(120);
 +
  }
 +
 
 +
  for (int i=5; i < 10; i++) {
 +
    ball[i] = new Ball();
 +
    //in zweiter Ebene
 +
    ball[i].x = random(a+c+ball[i].g1,a+c+b-ball[i].g1);
 +
    ball[i].y = random(ball[i].g2,height-ball[i].g2);
 +
    //Farbe
 +
    ball[i].h = (int)random(120,240);
 +
  }
 +
 
 +
  for (int i=10; i < ball.length; i++) {
 +
    ball[i] = new Ball();
 +
    //in dritter Ebene
 +
    ball[i].x = random(a+c+b+c+ball[i].g1,width-ball[i].g1);
 +
    ball[i].y = random(ball[i].g2,height-ball[i].g2);
 +
    //Farbe
 +
    ball[i].h = (int)random(240,360);
 +
  }
 +
}
 +
 +
void draw() {
 +
  background(0);
 +
  fill(255);
 +
  rect(a,0,c,height);
 +
  rect(a+c+b,0,c,height);
 +
 
 +
  for (int i=0; i < 15; i++) {
 +
    ball[i].position[0] = ball[i].x-ball[i].g1/2;
 +
    ball[i].position[1] = ball[i].x+ball[i].g1/2;
 +
    ball[i].position[2] = ball[i].y-ball[i].g2/2;
 +
    ball[i].position[3] = ball[i].y+ball[i].g2/2;
 +
  }
 +
 
 +
  for (int i=0; i < 5; i++) {
 +
    //Bewegen
 +
    if (ball[i].angle <= 360) {
 +
      ball[i].angle -= 2;
 +
    }
 +
    if (ball[i].angle <= 0) {
 +
      ball[i].angle = 360;
 +
    }
 +
    //im Bogen
 +
    ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6;
 +
    ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6;
 +
    ball[i].x = ball[i].x + ball[i].vx;
 +
    ball[i].y = ball[i].y + ball[i].vy;
 +
    //Ballgröße zurücksetzen
 +
    if (ball[i].g1 != 80) {
 +
      ball[i].g1 = 80;
 +
    }
 +
    //Rand oben
 +
    if (ball[i].x <= 0+ball[i].g1/2) {
 +
      ball[i].angle = 0;
 +
    }
 +
    //Rand unten
 +
    if (ball[i].x >= a-ball[i].g1/2) {
 +
      ball[i].angle = 180;
 +
      ball[i].g1 = ball[i].g1-20;
 +
    }
 +
    //links raus
 +
    if (ball[i].y <= 0-ball[i].g2) {
 +
      ball[i].y = height+ball[i].g2/2;
 +
    }
 +
    //rechts raus
 +
    if (ball[i].y >= height+ball[i].g2) {
 +
      ball[i].y = 0-ball[i].g2/2;
 +
    }
 +
    //Bälle stoßen aneinander
 +
    for (int j=i+1; j < 5; j++) {
 +
      if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) &&
 +
      (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) {
 +
        ball[i].angle = 225;
 +
      }
 +
      if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) &&
 +
      (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) {
 +
        ball[i].angle = 315;
 +
      }
 +
      if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) &&
 +
      (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) {
 +
        ball[i].angle = 135;
 +
      }
 +
      if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) &&
 +
      (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) {
 +
        ball[i].angle = 45;
 +
      }
 +
    }
 +
    ball[i].maleBall();
 +
  }
 +
 
 +
  for (int i=5; i < 10; i++) {
 +
    //Bewegen
 +
    if (ball[i].angle <= 360) {
 +
      ball[i].angle -= 3;
 +
    }
 +
    if (ball[i].angle <= 0) {
 +
      ball[i].angle = 360;
 +
    }
 +
    //im Bogen
 +
    ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6;
 +
    ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6;
 +
    ball[i].x = ball[i].x + ball[i].vx;
 +
    ball[i].y = ball[i].y + ball[i].vy;
 +
    //Ballgröße zurücksetzen
 +
    if (ball[i].g1 != 80) {
 +
      ball[i].g1 = 80;
 +
    }
 +
    //Rand oben
 +
    if (ball[i].x <= a+c+ball[i].g1/2) {
 +
      ball[i].angle = 0;
 +
    }
 +
    //Rand unten
 +
    if (ball[i].x >= a+c+b-ball[i].g1/2) {
 +
      ball[i].angle = 180;
 +
      ball[i].g1 = ball[i].g1-20;
 +
    }
 +
    //links raus
 +
    if (ball[i].y <= 0-ball[i].g2) {
 +
      ball[i].y = height+ball[i].g2/2;
 +
    }
 +
    //rechts raus
 +
    if (ball[i].y >= height+ball[i].g2) {
 +
      ball[i].y = 0-ball[i].g2/2;
 +
    }
 +
    //Bälle stoßen aneinander
 +
    for (int j=i+1; j < 10; j++) {
 +
      if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) &&
 +
      (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) {
 +
        ball[i].angle = 225;
 +
      }
 +
      if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) &&
 +
      (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) {
 +
        ball[i].angle = 315;
 +
      }
 +
      if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) &&
 +
      (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) {
 +
        ball[i].angle = 135;
 +
      }
 +
      if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) &&
 +
      (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) {
 +
        ball[i].angle = 45;
 +
      }
 +
    }
 +
    ball[i].maleBall();
 +
  }
 +
 
 +
  for (int i=10; i < 15; i++) {
 +
    //Bewegen
 +
    if (ball[i].angle <= 360) {
 +
      ball[i].angle -= 4;
 +
    }
 +
    if (ball[i].angle <= 0) {
 +
      ball[i].angle = 360;
 +
    }
 +
    //im Bogen
 +
    ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6;
 +
    ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6;
 +
    ball[i].x = ball[i].x + ball[i].vx;
 +
    ball[i].y = ball[i].y + ball[i].vy;
 +
    //Ballgröße zurücksetzen
 +
    if (ball[i].g1 != 80) {
 +
      ball[i].g1 = 80;
 +
    }
 +
    //Rand oben
 +
    if (ball[i].x <= a+c+b+c+ball[i].g1/2) {
 +
      ball[i].angle = 0;
 +
    }
 +
    //Rand unten
 +
    if (ball[i].x >= width-ball[i].g1/2) {
 +
      ball[i].angle = 180;
 +
      ball[i].g1 = ball[i].g1-20;
 +
    }
 +
    //links raus
 +
    if (ball[i].y <= 0-ball[i].g2) {
 +
      ball[i].y = height+ball[i].g2/2;
 +
    }
 +
    //rechts raus
 +
    if (ball[i].y >= height+ball[i].g2) {
 +
      ball[i].y = 0-ball[i].g2/2;
 +
    }
 +
    //Bälle stoßen aneinander
 +
    for (int j=i+1; j < 15; j++) {
 +
      if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) &&
 +
      (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) {
 +
        ball[i].angle = 225;
 +
      }
 +
      if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) &&
 +
      (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) {
 +
        ball[i].angle = 315;
 +
      }
 +
      if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) &&
 +
      (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) {
 +
        ball[i].angle = 135;
 +
      }
 +
      if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) &&
 +
      (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) {
 +
        ball[i].angle = 45;
 +
      }
 +
    }
 +
    ball[i].maleBall();
 +
  }
 +
}
  
 
== Objekt Ball ==
 
== Objekt Ball ==
 +
 +
class Ball {
 +
 
 +
  int g1,g2; //Größe
 +
  float x,y; //Position
 +
 
 +
  int h,s,b,a; //Farbe
 +
 
 +
  float vx,vy; //Geschwindigkeit
 +
  float angle; //Gradzahl
 +
 
 +
  float[] position = new float[4]; // die 4 Ecken des Balls;
 +
 
 +
  Ball() {
 +
    g1 = 80;
 +
    g2 = g1;
 +
   
 +
    s = 100;
 +
    b = 100-g1;
 +
    a = 100;
 +
   
 +
    angle = 90;
 +
  }
 +
 
 +
  void maleBall() {
 +
    for (int i=0; i<g1; i+=5) { //Abrundungen bzw. Schatten
 +
      fill(h,s,b+i,a);
 +
      ellipse(x,y,g1-i,g2-i);
 +
    }
 +
  }
 +
}

Revision as of 15:16, 26 March 2011

Der Denkfehler ist behoben. Jetzt ist es fast perfekt. Naja, wenn der Ball gegen die Laufrichtung abprallt, läuft er auf seiner Kreisbahn Richtung Decke weiter. Die physikalischen Gesetze sind aufgehoben...

Code B

Ball[] ball = new Ball[15]; int a,b,c; //Abstände der Ebenen

void setup() {

 size(1280,1024);
 //size(1920,1200);
 smooth();
 noStroke();
 colorMode(HSB[[Farbe#Farbräume|Hue Saturation Brightness]] Colorspace,360,100,100,100);
 
 a = 500; //700 Größe der ersten Ebene
 b = 400; //600 Größe der zweiten Ebene
 c = 40; //60 Lücke
 
 for (int i=0; i < 5; i++) {
   ball[i] = new Ball();
   //in erster Ebene
   ball[i].x = random(ball[i].g1,a-ball[i].g1);
   ball[i].y = random(ball[i].g2,height-ball[i].g2);
   //Farbe
   ball[i].h = (int)random(120);
 }
 
 for (int i=5; i < 10; i++) {
   ball[i] = new Ball();
   //in zweiter Ebene
   ball[i].x = random(a+c+ball[i].g1,a+c+b-ball[i].g1);
   ball[i].y = random(ball[i].g2,height-ball[i].g2);
   //Farbe
   ball[i].h = (int)random(120,240);
 }
 
 for (int i=10; i < ball.length; i++) {
   ball[i] = new Ball();
   //in dritter Ebene
   ball[i].x = random(a+c+b+c+ball[i].g1,width-ball[i].g1);
   ball[i].y = random(ball[i].g2,height-ball[i].g2);
   //Farbe
   ball[i].h = (int)random(240,360);
 }

}

void draw() {

 background(0);
 fill(255);
 rect(a,0,c,height);
 rect(a+c+b,0,c,height);
 
 for (int i=0; i < 15; i++) {
   ball[i].position[0] = ball[i].x-ball[i].g1/2;
   ball[i].position[1] = ball[i].x+ball[i].g1/2;
   ball[i].position[2] = ball[i].y-ball[i].g2/2;
   ball[i].position[3] = ball[i].y+ball[i].g2/2;
 }
 
 for (int i=0; i < 5; i++) {
   //Bewegen
   if (ball[i].angle <= 360) {
     ball[i].angle -= 2;
   }
   if (ball[i].angle <= 0) {
     ball[i].angle = 360;
   }
   //im Bogen
   ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6;
   ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6;
   ball[i].x = ball[i].x + ball[i].vx;
   ball[i].y = ball[i].y + ball[i].vy;
   //Ballgröße zurücksetzen
   if (ball[i].g1 != 80) {
     ball[i].g1 = 80;
   }
   //Rand oben
   if (ball[i].x <= 0+ball[i].g1/2) {
     ball[i].angle = 0;
   }
   //Rand unten
   if (ball[i].x >= a-ball[i].g1/2) {
     ball[i].angle = 180;
     ball[i].g1 = ball[i].g1-20;
   }
   //links raus
   if (ball[i].y <= 0-ball[i].g2) {
     ball[i].y = height+ball[i].g2/2;
   }
   //rechts raus
   if (ball[i].y >= height+ball[i].g2) {
     ball[i].y = 0-ball[i].g2/2;
   }
   //Bälle stoßen aneinander
   for (int j=i+1; j < 5; j++) {
     if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) && 
     (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) {
       ball[i].angle = 225;
     }
     if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) && 
     (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) {
       ball[i].angle = 315;
     }
     if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) && 
     (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) {
       ball[i].angle = 135;
     }
     if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) && 
     (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) {
       ball[i].angle = 45;
     }
   }
   ball[i].maleBall();
 }
 
 for (int i=5; i < 10; i++) {
   //Bewegen
   if (ball[i].angle <= 360) {
     ball[i].angle -= 3;
   }
   if (ball[i].angle <= 0) {
     ball[i].angle = 360;
   }
   //im Bogen
   ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6;
   ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6;
   ball[i].x = ball[i].x + ball[i].vx;
   ball[i].y = ball[i].y + ball[i].vy;
   //Ballgröße zurücksetzen
   if (ball[i].g1 != 80) {
     ball[i].g1 = 80;
   }
   //Rand oben
   if (ball[i].x <= a+c+ball[i].g1/2) {
     ball[i].angle = 0;
   }
   //Rand unten
   if (ball[i].x >= a+c+b-ball[i].g1/2) {
     ball[i].angle = 180;
     ball[i].g1 = ball[i].g1-20;
   }
   //links raus
   if (ball[i].y <= 0-ball[i].g2) {
     ball[i].y = height+ball[i].g2/2;
   }
   //rechts raus
   if (ball[i].y >= height+ball[i].g2) {
     ball[i].y = 0-ball[i].g2/2;
   }
   //Bälle stoßen aneinander
   for (int j=i+1; j < 10; j++) {
     if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) && 
     (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) {
       ball[i].angle = 225;
     }
     if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) && 
     (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) {
       ball[i].angle = 315;
     }
     if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) && 
     (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) {
       ball[i].angle = 135;
     }
     if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) && 
     (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) {
       ball[i].angle = 45;
     }
   }
   ball[i].maleBall();
 }
 
 for (int i=10; i < 15; i++) {
   //Bewegen
   if (ball[i].angle <= 360) {
     ball[i].angle -= 4;
   }
   if (ball[i].angle <= 0) {
     ball[i].angle = 360;
   }
   //im Bogen
   ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6;
   ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6;
   ball[i].x = ball[i].x + ball[i].vx;
   ball[i].y = ball[i].y + ball[i].vy;
   //Ballgröße zurücksetzen
   if (ball[i].g1 != 80) {
     ball[i].g1 = 80;
   }
   //Rand oben
   if (ball[i].x <= a+c+b+c+ball[i].g1/2) {
     ball[i].angle = 0;
   }
   //Rand unten
   if (ball[i].x >= width-ball[i].g1/2) {
     ball[i].angle = 180;
     ball[i].g1 = ball[i].g1-20;
   }
   //links raus
   if (ball[i].y <= 0-ball[i].g2) {
     ball[i].y = height+ball[i].g2/2;
   }
   //rechts raus
   if (ball[i].y >= height+ball[i].g2) {
     ball[i].y = 0-ball[i].g2/2;
   }
   //Bälle stoßen aneinander
   for (int j=i+1; j < 15; j++) {
     if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) && 
     (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) {
       ball[i].angle = 225;
     }
     if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) && 
     (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) {
       ball[i].angle = 315;
     }
     if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) && 
     (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) {
       ball[i].angle = 135;
     }
     if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) && 
     (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) {
       ball[i].angle = 45;
     }
   }
   ball[i].maleBall();
 }

}

Objekt Ball

class Ball {

 int g1,g2; //Größe
 float x,y; //Position
 
 int h,s,b,a; //Farbe
 
 float vx,vy; //Geschwindigkeit
 float angle; //Gradzahl
 
 float[] position = new float[4]; // die 4 Ecken des Balls;
 
 Ball() {
   g1 = 80;
   g2 = g1;
   
   s = 100;
   b = 100-g1; 
   a = 100;
   
   angle = 90;
 }
 
 void maleBall() {
   for (int i=0; i<g1; i+=5) { //Abrundungen bzw. Schatten
      fill(h,s,b+i,a);
      ellipse(x,y,g1-i,g2-i);
   }
 }

}