< 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 |
||
(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> |
Latest revision as of 15:20, 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... Außerdem werden ein paar Bälle manchmal aus dem Bereich heraus gekickt.
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);
}
}
}