Bovenstaande animatie is in p5.js de kinderen draaien in y richting, aan size moet daarom P3D worden toegevoegd (voor p5.js WEBGL)
OOP Familie met draaiende kinderen. terug naar de inleiding
Schets met de subclass "Mens" met de methodes man en vrouw en de superclass met rotatie methodes
De schets is uitgelijnd naar het computer scherm formaat.
De breedte en hoogte van de figuren is nx en ny net als het huis in de class "Huis" van de schets huizenfabriek
Mens vrouw;
Mens vkindRondV;
Mens vkindRondM;
Mens man;
Mens mkindRondM;
Mens mkindRondV;
Ruitjes ruitjespap;
float x; float y;
float nx; float ny;
float n;
void setup() {
// fullScreen(P3D);
size(860,440,P3D);
x = width/2;
y = height/2;
nx = width/2.5;
ny = height/2.5;
n = height/2.5;
ruitjespap = new Ruitjes(n, x, y);
//constructor 1) = x, 2) = y, 3) = breedte, 4) = hoogte
// 1 2 3 4
vrouw = new Mens(x+n, y+n*0.5, nx, ny, color(106, 165, 45));
//n*0.5 is de staal van de draaicirkel
vkindRondV = new Mens(n*0.5, 0, nx*0.8, ny*0.5, color(106, 165, 255));
mkindRondV = new Mens(n*0.5, 0, nx*0.8, ny*0.5, color(200, 100, 100));
man = new Mens(x-n, y+n*0.5, nx, ny, color(255, 165, 45));
mkindRondM = new Mens(n*0.5, 0, nx*0.8, ny*0.5, color(200, 100, 100));
vkindRondM = new Mens(n*0.5, 0, nx*0.8, ny*0.5, color(106, 165, 255));
}
void draw() {
background(#E6FBFF);
ruitjespap.display();
//De niet bewegende figuren tekenen
man.display_man();
// man.xReLi();
vrouw.display_vrouw();
// vrouw.xLiRe();
//man kinderen die rond de man draaien
//in translate de positie van de man
pushMatrix();
translate(x-n, y+n*0.5);
mkindRondM.draaienYLi();
mkindRondM.display_man();
popMatrix();
//vrouw kinderen die rond de man draaien
//in translate de positie van de man
pushMatrix();
translate(x-n, y+n*0.5);
vkindRondM.draaienYRe();
vkindRondM.display_vrouw();
popMatrix();
//man kinderen die rond de vrouw draaien
//in translate de positite van de vrouw
pushMatrix();
translate(x+n, y+n*0.5);
mkindRondV.draaienYLi();
mkindRondV.display_man();
popMatrix();
//vrouw kinderen die rond de vrouw draaien
//in translate de positite van de vrouw
pushMatrix();
translate(x+n, y+n*0.5);
vkindRondV.draaienYRe();
vkindRondV.display_vrouw();
popMatrix();
}
De subclass "Mens" met de methodes man en vrouw
class Mens extends Super {
// float x; //omdat in de superclass bewegingsfuncties in x richting zijn toegevoegd
// float x; verplaatsen naar de superclas
float y;
float nx;
float ny;
color c;
Mens(float x_, float y_, float nx_, float ny_, color c_) {
x = x_;
y = y_;
ny = ny_;
nx = nx_;
c = c_;
}
void display_man() {
rectMode(CORNER);
fill(c);
rect(x-nx*0.1, y-ny*0.7, nx*0.2, ny*0.35); // lijf
fill(255);
ellipse(x, y-ny*0.85, nx*0.2, ny*0.3); // hoofd
fill(255, 0, 0);
ellipse(x-nx*0.05, y-ny*0.9, nx*0.04, nx*0.04); // oog re
ellipse(x+nx*0.05, y-ny*0.9, nx*0.04, nx*0.04); // oog re // oog li
ellipse(x, y-ny*0.85, nx*0.03, nx*0.04); // neus
fill(255);
rectMode(CENTER);
rect(x, y-ny*0.75, nx*0.1, ny*0.02, 30); // mond
ellipse(x+nx*0.1, y-ny*0.85, nx*0.03, ny*0.06); // rechter oor
ellipse(x-nx*0.1, y-ny*0.85, nx*0.03, ny*0.06); // linker oor
rectMode(CORNER);
rect(x-nx*0.2, y-ny*0.75, nx*0.1, ny*0.2); // linkerarm
rect(x+nx*0.1, y-ny*0.75, nx*0.1, ny*0.2); // rechterarm
rect(x-nx*0.08, y-ny*0.35, nx*0.06,ny*0.35); // linkerbeen
rect(x+nx*0.02,y-ny*0.35, nx*0.06,ny*0.35); // rechterbeen
}
void display_vrouw() {
rectMode(CORNER);
fill(c);
rect(x-nx*0.1, y-ny*0.7, nx*0.2, ny*0.2); // lijf
fill(255);
ellipse(x, y-ny*0.85, nx*0.2, ny*0.3); // hoofd
fill(255, 0, 0);
ellipse(x-nx*0.05, y-ny*0.9, nx*0.04, nx*0.04); // oog re
ellipse(x+nx*0.05, y-ny*0.9, nx*0.04, nx*0.04); // oog re // oog li
ellipse(x, y-ny*0.85, nx*0.03, nx*0.04); // neus
fill(255);
rectMode(CENTER);
rect(x, y-ny*0.75, nx*0.1, ny*0.02, 30); // mond
ellipse(x+nx*0.1, y-ny*0.85, nx*0.03, ny*0.06); // rechter oor
ellipse(x-nx*0.1, y-ny*0.85, nx*0.03, ny*0.06); // linker oor
rectMode(CORNER);
rect(x-nx*0.2, y-ny*0.75, nx*0.1, ny*0.2); // linkerarm
rect(x+nx*0.1, y-ny*0.75, nx*0.1, ny*0.2); // rechterarm
rect(x-nx*0.08, y-ny*0.2, nx*0.06,ny*0.2); // linkerbeen
rect(x+nx*0.02,y-ny*0.2, nx*0.06,ny*0.2); // rechterbeen
fill(c);
quad(x-nx*0.1, y-ny*0.5, x+nx*0.1, y-ny*0.5, x+nx*0.2, y-ny*0.2, x-nx*0.2, y-ny*0.2);
}
}
De superclass met de rotatie methodes en beweging in x richting
class Super {
float x;
int i;
float xsnelhRe = 1;
float xsnelhLi = 1;
Super() {
}
void display_man() {
}
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;
}
void xReLi() {
x = x - xsnelhRe;
if ((x > width) || (x < 0)) {
xsnelhRe = xsnelhRe * -1;
}
}
void xLiRe() {
x = x + xsnelhLi;
if ((x > width) || (x < 0)) {
xsnelhLi = xsnelhLi * -1;
}
}
}