10 vormen overlappen, diameter varrieert met ster class       terug naar de inleiding
De schets:
 
 


DiamVar rood;  
DiamVar groen; 
DiamVar blauwvierkant; 
DiamVar groenLinks; 
DiamVar groenRechts; 
Ster ster; 
Ster sterLi;
void setup() {  
 // size(960, 540);  
 fullScreen(); 
 //argumenten van de constructor: x positie, y positie, kleinste diameter 
 //grootste diameter, snelheid en r,g,b kleur 
 rood = new DiamVar(width/4*2, height/2, height/27, height/1.08, 4.0, color(255, 20, 20, 100));  
 groen = new DiamVar(width/4*2, height/2, width/5, width/1.7, 0.5, color(0, 255, 50, 100));  
 blauwvierkant = new DiamVar(width/4*2, height/2, width/5, width/2.5, 0.5, color(23,229,228,100)); 
 groenLinks = new DiamVar(width/4*1, height/2, width/17, width/2.5, 1.0, color(0, 200, 20, 100));  
 groenRechts = new DiamVar(width/4*3, height/2, width/17, width/2.5, 0.5, color(25, 255, 20, 100));
//argumenten ster constructor positie x en y binnen en buiten diameter, aantal punten en color 
 ster = new Ster(width/2, height/2, 10, 250, 8, color(255, 0, 0)); 
 sterLi = new Ster(width/4, height/4, 10, 200, 10, color(180, 23, 229, 100)); 
}
void draw() {  
// background(23, 229,228); 
 background(20); 
 rood.cirkel();  
 rood.kleinGroot(); 
 rood.snelhxy(); 
  
 groen.cirkel();  
 groen.kleinGroot();
groenLinks.cirkel();  
 groenLinks.kleinGroot();
groenRechts.cirkel();  
 groenRechts.kleinGroot();
if (groenRechts.overlappen(rood)) { 
 rood.c = color(255, 255, 0, 100); 
 ster.ster(); 
 }  
 if (groenLinks.overlappen(rood)) { 
 rood.c = color(255, 20, 20, 100); 
 blauwvierkant.vierkant(); 
 blauwvierkant.kleinGroot(); 
 sterLi.ster(); 
 } 
}
void keyPressed() {  
 if (key == 's') {  
 noLoop(); 
 }  
 if (key == 'r') {  
 loop(); 
 } 
}
 
De class DiamVar bevat de vormen "cirkel" en "vierkant" die in grootte varrieren, de boolean die true wordt als de
cirkels elkaar raken en de bewegingmethodes
 
 

class DiamVar {  
 float x;  
 float y;  
 float beginvar; 
 float groot;  
 float xsnelh = 1; 
 float ysnelh = 1; 
 float snelh; 
 float begin; 
 color c;
DiamVar(float x_, float y_, float beginvar_, float groot_, float snelh_, color c_) {  
 x = x_;  
 y = y_;  
 beginvar = beginvar_;  
 groot = groot_; 
 snelh = snelh_; 
 c = c_;
begin = beginvar; 
 }
boolean overlappen(DiamVar met) {  
 float d = dist (x, y, met.x, met.y) ;  
 //d is de afstand tussen de middelpunten van de cirkels 
 if (d < beginvar/2 + met.beginvar/2) {  
 // beginvar en met.beginvar zijn de diameters van de cirkels 
 return true; 
 } else { 
 return false; 
 } 
 }
void cirkel() { 
 fill(c);  
 ellipse(x, y, beginvar, beginvar); 
 }
void vierkant() {  
 rectMode(CENTER);  
 fill(c);  
 rect(x, y, beginvar, beginvar,20); 
 }
void kleinGroot() { 
 beginvar = beginvar + snelh; 
 if ((beginvar > groot) || (beginvar < begin)) 
 { 
 snelh = snelh * -1; 
 } 
 }
void snelhxy() {  
 x = x + xsnelh;  
 if ((x > width) || (x < 0)) {  
 xsnelh = xsnelh * -1; 
 }  
 y = y + ysnelh;  
 if ((y > height) || (y < 0)) {  
 ysnelh = ysnelh * -1; 
 } 
 } 
}
 
class Ster { 
 float x;  
 float y;  
 float radius1; 
 float radius2; 
 int np; 
 color c;
// Constructor van de ster  
 Ster(float x_, float y_, float radius1_, float radius2_, int np_, color c_) {  
 x = x_; 
 y = y_; 
 radius1 = radius1_; 
 radius2 = radius2_; 
 c = c_; 
 np = np_; 
 }
void ster() {  
 float hoek = TWO_PI / np;  
 float halfHoek = hoek/2.0;  
 fill(c);  
 stroke(0);  
 beginShape();  
 for (float a = 0; a < TWO_PI; a += hoek) {  
 float sx = x + cos(a) * radius2;  
 float sy = y + sin(a) * radius2;  
 vertex(sx, sy);  
 sx = x + cos(a+halfHoek) * radius1;  
 sy = y + sin(a+halfHoek) * radius1;  
 vertex(sx, sy); 
 }  
 endShape(CLOSE); 
 } 
}