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;
}
}
}