4) OOP Familie met draaiende kinderen                          terug naar de inleiding
 
Bovenstaande schets draait op OpenProcessing onder  processing.js . Processing.js accepteert geen ronde hoeken in "rect"
De ogen en neus van de man en vrouw zijn niet rood, dit klopt niet! Ingevoerd is fill(255,0,0);
 

Schets met de twee subclassen ManSub en VrouwSub en de superclass met rotatie methodes

 
 

VrouwSub vrouw;  
VrouwSub vkindRondV; 
VrouwSub vkindRondM;
ManSub man; 
ManSub mkindRondM; 
ManSub mkindRondV;
void setup() {  
 fullScreen(P3D); 
 // size(1000, 800, P3D);
 
 vrouw = new VrouwSub(width/4*3, height/2, width/24, height/4.4, color(106, 165, 45));  
 vkindRondV = new VrouwSub(width/12, 0, width/24, height/10.8, color(206, 50, 40));  
 mkindRondV = new ManSub(width/12, 0, width/24, height/10.8, color(200, 200, 100)); 
  
 man = new ManSub(width/4*1, height/2, width/24, height/4.4, color(255, 165, 45));  
 mkindRondM = new ManSub(width/12, 0, width/24, height/10.8, color(200, 100, 100)); 
 vkindRondM = new VrouwSub(width/12, 0, width/24, height/10.8, color(106, 165, 255));  
}

void draw() {  
 background(189, 237, 240); 
 //De niet bewegende figuren tekenen 
 man.display(); 
 vrouw.display(); 
  
//Kinderen die rond de man draaien 
 pushMatrix();  
 translate(width/4*1, height/4*2.8); 
 mkindRondM.draaienYLi();  
 mkindRondM.display();  
 popMatrix();
 
pushMatrix(); 
 translate(width/4*1, height/4*2.8); 
 vkindRondM.draaienYRe(); 
 vkindRondM.display(); 
 popMatrix(); 
  
 //Kinderen die rond de vrouw draaien 
 pushMatrix();  
 translate(width/4*3, height/4*2.8); 
 mkindRondV.draaienYLi();  
 mkindRondV.display();  
 popMatrix();
 
pushMatrix(); 
 translate(width/4*3, height/4*2.8); 
 vkindRondV.draaienYRe(); 
 vkindRondV.display(); 
 popMatrix();  
}
void keyPressed() {  
 if (key == 's') { 
 noLoop(); 
 }  
 if (key == 'r') { 
 loop(); 
 } 
}
 

De subclass ManSub met het midden van het lijf in het 0,0 punt

 


 class ManSub extends Super {
ManSub(float x_, float y_, float b_, float h_, color c_) {  
 super(x_, y_, b_, h_, c_); 
 } 
 void display() {  
 rectMode(CENTER);  
 fill(c);  
 rect(x, y, b, h, 10); // lijf  
 fill(255);  
 ellipse(x, y-h, b, h); // hoofd  
 fill(255, 0, 0);  
 ellipse(x+b/4, y-h*5/4, b/6, h/12); // oog re  
 ellipse(x-b/4, y-h*5/4, b/6, h/12); // oog li  
 ellipse(x, y-h, b/6, h/8);                // neus  
 fill(255);  
 rect(x, y-h/4*3, b/2, h/16, 30);   // mond  
 ellipse(x+b/2, y-h, b/6, h/6);      // rechter oor  
 ellipse(x-b/2, y-h, b/6, h/6);       // linker oor  
 rect(x-b/1.3, y-h/3, b/2, h/2);     // linkerarm  
 rect(x+b/1.3, y-h/3, b/2, h/2);     // rechterarm  
 rect(x-b/4, y+h, b/2.5, h);           // linkerbeen  
 rect(x+b/4, y+h, b/2.5, h);          // rechterbeen 
 } 
}

De subclasse VrouwSub

 

 class VrouwSub extends Super {
VrouwSub(float x_, float y_, float b_, float h_, color c_) {  
 super(x_, y_, b_, h_, c_); 
 } 
 void display() {  
 rectMode(CENTER);  
 fill(c);  
 rect(x, y-h/8, b, h/4*3, 10);         // lijf  
 fill(255);  
 ellipse(x, y-h, b, h);                    // hoofd  
 fill(255, 0, 0);  
 ellipse(x+b/4, y-h*5/4, b/6, h/12); // oog re  
 ellipse(x-b/4, y-h*5/4, b/6, h/12);   // oog li  
 ellipse(x, y-h, b/6, h/8); // neus  
 fill(255);  
 rect(x, y-h/4*3, b/2, h/16, 30);       // mond  
 ellipse(x+b/2, y-h, b/6, h/6);          // rechter oor  
 ellipse(x-b/2, y-h, b/6, h/6);           // linker oor  
 rect(x-b/1.3, y-h/3, b/2, h/2);         // linkerarm  
 rect(x+b/1.3, y-h/3, b/2, h/2);        // rechterarm  
 rect(x-b/4, y+h/4*5, b/2.5, h/2);     // linkerbeen  
 rect(x+b/4, y+h/4*5, b/2.5, h/2);    // rechterbeen 
 fill(c);  
 quad(x-b, y+h, x-b/2, y+h/4, x+b/2, y+h/4, x+b, y+h); 
 } 
}
 
 De superclass met de rotatie methodes
 
 


class Super {  
 float x;  float y;  float b;  float h;  color c;  int i;
Super(float x_, float y_, float b_, float h_, color c_) {  
 x = x_;  y = y_;  b = b_;  h = h_;  c = c_; 
 }
void draaienYLi() {  
 i = i+1;  
 rotateY(radians(i));  
 if (i == 360) i = 0; 
 }
void draaienYRe() {  
 i = i+1;  
 rotateY(-radians(i));  
 if (i == 360) i = 0; 
 }  
}