703
edits
(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...") |
No edit summary |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
''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...'' | ''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... Außerdem werden ein paar Bälle manchmal aus dem Bereich heraus gekickt.'' | ||
== Code B == | == Code B == | ||
<source lang="Java">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(); | |||
} | |||
} | |||
</source> | |||
== Objekt Ball == | == Objekt Ball == | ||
<source lang="Java">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); | |||
} | |||
} | |||
} | |||
</source> | |||
edits