- Mouse (posizione verticale): rotazione intorno all’asse x
- Mouse (tasto): visualizza una combinazione casuale delle facce
- Mouse (tasto): si può accendere/spegnere la singola faccia cliccando sul quadratino corrispondente in alto a destra
- Applicazione Java
final int numVertici = 8, // è un cubo... numFacce = 6; // ............ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ final int CHIARO = 255; // intensità componente colore final int SCURO = 0; final int TRASP = 127; // valore di trasparenza (metà) //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ color COLORI[]= { color(CHIARO, SCURO, SCURO, TRASP), color( SCURO, CHIARO, SCURO, TRASP), color( SCURO, SCURO, CHIARO, TRASP) }; final color TRATTO = color(CHIARO/2); final color SFONDO = color(CHIARO); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ color nuovoColore() { return COLORI[(int)random(3)]; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ final int DIM = 125; // dimensione dello spigolo final float deltaR = PI/200; // velocità di rotazione asse y float angoloR=0, WIDTH2 , // CENTRO FINESTRA HEIGHT2; // ............... //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Punto vertici[]= { new Punto( 1, 1, 1), // 0 new Punto( 1, 1,-1), // 1 new Punto( 1,-1, 1), // 2 new Punto( 1,-1,-1), // 3 new Punto(-1, 1, 1), // 4 new Punto(-1, 1,-1), // 5 new Punto(-1,-1, 1), // 6 new Punto(-1,-1,-1) // 7 }; int quadrato[][]={ { 0, 1, 3, 2 }, // 0 { 1, 5, 7, 3 }, // 1 { 5, 4, 6, 7 }, // 2 { 4, 0, 2, 6 }, // 3 { 2, 3, 7, 6 }, // 4 { 5, 1, 0, 4 } // 5 }; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Faccia nuovaFaccia(int x) { return new Faccia( vertici[quadrato[x][0]], vertici[quadrato[x][1]], vertici[quadrato[x][2]], vertici[quadrato[x][3]], nuovoColore() ); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Faccia facce[]=new Faccia[numFacce]; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void setup() { size(500, 500, P3D); stroke(TRATTO); lights(); WIDTH2 =width/2; HEIGHT2=height/2; creaFacce(); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void draw() { background(SFONDO); angoloR += deltaR; if(angoloR > TWO_PI) angoloR -= TWO_PI; pushMatrix(); translate(WIDTH2, HEIGHT2); rotateX(-map(mouseY, 0, width, 0, TWO_PI)); rotateY(angoloR); scale(DIM); for(int i=0; i<numFacce; i++) { if(facce[i]!=null) facce[i].draw(); } popMatrix(); visControllo(); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ class Punto { float x, y, z; Punto(float nx, float ny, float nz) { x=nx; y=ny; z=nz; } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ class Faccia { Punto p1, p2, p3, p4; color c; Faccia(Punto np1, Punto np2, Punto np3, Punto np4, color nc) { p1=np1; p2=np2; p3=np3; p4=np4; c=nc; } void draw() { fill(c); beginShape(QUADS); vertex(p1.x, p1.y, p1.z); vertex(p2.x, p2.y, p2.z); vertex(p3.x, p3.y, p3.z); vertex(p4.x, p4.y, p4.z); endShape(); } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ final int dimCONTR = 20; int posControlli[][]= { { 10, 30 , 10+dimCONTR, 30+dimCONTR }, { 30, 30 , 30+dimCONTR, 30+dimCONTR }, { 50, 30 , 50+dimCONTR, 30+dimCONTR }, { 70, 30 , 70+dimCONTR, 30+dimCONTR }, { 30, 50 , 30+dimCONTR, 50+dimCONTR }, { 30, 10 , 30+dimCONTR, 10+dimCONTR } }; void visControllo() { for(int i=0; i < numFacce; i++) { if(facce[i]==null) fill(SFONDO); else fill(facce[i].c); rect(posControlli[i][0], posControlli[i][1], dimCONTR, dimCONTR); } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void mousePressed() { int X=mouseX; int Y=mouseY; for(int i=0; i < numFacce; i++) { if(X > posControlli[i][0] && X < posControlli[i][2] && Y > posControlli[i][1] && Y < posControlli[i][3]) { if(facce[i]==null) facce[i]=nuovaFaccia(i); else facce[i]=null; return; } } creaFacce(); } void creaFacce() { for(int i=0; i < numFacce; i++) { switch((int)random(3)) { case 0: case 1: facce[i]=nuovaFaccia(i); break; case 2: facce[i]=null; break; } } }