< GMU:Immersive Strategien | Inhalte | Bälle
(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 |
||
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,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); } }
}