vormen overlappen en diameters varieren .            terug naar de inleiding

bekijk de cirkels en het vierkant

Door het overlappen verandert de kleur van de groene en de lichgroene cirkel.
Dit dankzij de boolean functies (regel 43 en 53) overlappen deze is "true" nadat de cirkels elkaar raken.
Door bijv color(random(255), random(200), 20) in regel 44 in te voeren zal de groene cirkel tijdens overlap gaan flikkeren.
Onder deze schets staat de class "DiamVar" met de boolean methode "overlappen" (regel 21 t/m 30).
 
 

DiamVar cirkel1;   // is de rode cirkel
DiamVar cirkel2;   // is de groene cirkel
DiamVar rechth1;   // is een blauwe rechthoek
DiamVar cirkel3;   // is een gele cirkel
DiamVar cirkel4;   // is een bruine cirke;l
Ruitjes ruitjespap;
 
void setup() {   
 size(960,540);  
 float x = width/2; 
 float y = height/2; 
 float n = height/30; 
 //argumenten van de constructor:1) x positie, 2) y positie, 3) begin diameter 4) eind diameter, 5) snelheid 6) color 
 //                       1    2      3     4    5             6
 cirkel1 = new DiamVar(x-10*n, y,   10*n, 15*n, 0.5, color(255, 20, 20,100));  //rood 
 cirkel2 = new DiamVar(x+15*n, y,    5*n, 20*n,   2, color(0, 255, 50, 100));  //groen 
 rechth1 = new DiamVar(x-5*n, y-5*n, 5*n, 10*n, 0.5, color(50, 0, 255, 100));  //blauw
 cirkel3 = new DiamVar(x+4*n, y-4*n, 5*n, 10*n,   1, color(255,200,20, 100));  //geel  
 cirkel4 = new DiamVar(x,     y+5*n, 5*n, 15*n, 0.3, color(247,141,10, 100));  //bruin
 ruitjespap = new Ruitjes(n,x,y);
}
 
void draw() {   
 background(#E6FBFF); 
 cirkel1.displayE();   
 cirkel1.variatieKG(); 
  
 cirkel2.displayE();   
 cirkel2.variatieKG(); 
  
 rechth1.displayR();  
 rechth1.variatieKG();  
 
 cirkel3.displayE();   
 cirkel3.variatieKG(); 
  
 cirkel4.displayE();   
 cirkel4.variatieKG(); 
 
// als de rode cirkel1 botst met de groene cirkel4, 
// De kleur van de groene cirkel4 wordt bruin
if (cirkel4.overlappen(cirkel1)) {  
   cirkel4.c = color(225, 100, 0, 100); 
  }
   else 
 {
   cirkel4.c = color(152,173,25, 100); 
} 
 
 // als de groene cirkel2 botst met de gele cirkel3, 
//  de kleur van de groene cirkel2 wordt rood 
if (cirkel2.overlappen(cirkel3)) {  
    cirkel2.c = color(255, 20, 20, 100);  
 } 
   else 
 {
   cirkel2.c = color(0, 255, 50, 100); 
} 
// ruitjespap.display();
} 
 
void keyPressed() {   
 if (key == 's') {   
 noLoop();  
 }   
 if (key == 'r') {   
 loop();  
 }  
}

 

De class DiamVar met de overlappen boolean methode

In de boolean (regel 21) worden de afstanden tussen de vorm objecten met de dist functie gemeten.
Zodra de "d" kleiner is dat de afstand tussen de stralen van de 2 vormen is de boolean "overlappen" true.
In regel 24 is begin/2 de straal van object1 en met.begin/2 is de straal de vorm van het andere object2
De berekening wordt uitgevoerd in de overlappen methode van object1. Via overlappen(DiamVar met); beschikt de boolean ook over object2
 
 

class DiamVar {   
  float x;  float y;  float b;   
  float begin;  
  float eind;  
  color c;   
  float snelh; 
  float beginConst; 
  
  DiamVar(float x_, float y_, float begin_, float eind_, float snelh_, color c_) {   
    x = x_;   
    y = y_;   
    begin = begin_;   
    eind = eind_;  
    snelh = snelh_;  
    c = c_; 
   
    beginConst = begin; 
  } 
  
  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 < begin/2 + met.begin/2) {  
 // begin en met.begin zijn de diameters van de cirkels 
 return true; 
 } else { 
 return false; 
 } 
 }
 
  void displayE() {  
    fill(c);   
    ellipse(x, y, begin, begin); 
  } 
  
  void displayR() {   
    rectMode(CENTER);   
    fill(c);   
    rect(x, y, begin, begin); 
  } 
  
  void variatieKG() {  
    begin = begin + snelh; 
    //  || is een logische OR. De snelheid moet in twee situaties omdraaien
    if ((begin > eind) || (begin < beginConst)) 
    {  
      snelh = snelh * -1; 
    } 
  } 
}