- Mouse (posizione verticale): rotazione intorno all’asse x
- Mouse (tasto): visualizza una combinazione casuale degli spigoli
- Mouse (Ctrl+tasto): rivela tutti gli spigoli
- Applicazione Java
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ final int numVertici=8, numSpigoli=12; Linea spigoli[]=new Linea[numSpigoli]; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ final int CHIARO = 255; final int SCURO = 0; final int TRASP = 127; final color TRATTO = color(SCURO,SCURO,CHIARO, TRASP); final color SFONDO = color(CHIARO); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ final float DIM = 125; final int dimTRATTO = 8; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ final float deltaR = PI/200; float angoloR=0, WIDTH2 , 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 adiacenze[][]= { // 0,1,2,3,4,5,6,7 { 0,1,1,0,1,0,0,0 } , // 0 { 1,0,0,1,0,1,0,0 } , // 1 { 1,0,0,1,0,0,1,0 } , // 2 { 0,1,1,0,0,0,0,1 } , // 3 { 1,0,0,0,0,1,1,0 } , // 4 { 0,1,0,0,1,0,0,1 } , // 5 { 0,0,1,0,1,0,0,1 } , // 6 { 0,0,0,1,0,1,1,0 } // 7 }; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void creaSpigoli0() { int n=0; for(int i=0; i < numVertici; i++) for(int j=i+1; j < numVertici; j++) { if(adiacenze[i][j] == 1) { spigoli[n]=new Linea( vertici[i], vertici[j]); n++; } } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void creaSpigoli() { int n=0; for(int i=0; i < numVertici; i++) for(int j=i+1; j < numVertici; j++) { if(adiacenze[i][j] == 1) { switch((int)random(3)) { case 0: case 1: spigoli[n]=new Linea( vertici[i], vertici[j]); break; case 2: spigoli[n]=null; break; } n++; } } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void mousePressed() { if(keyPressed) creaSpigoli0(); else creaSpigoli(); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void setup() { size(500, 500, P3D); smooth(); stroke(TRATTO); strokeWeight(dimTRATTO); WIDTH2 =width/2; HEIGHT2=height/2; creaSpigoli0(); } void draw() { background(SFONDO); angoloR += deltaR; if(angoloR > TWO_PI) angoloR -= TWO_PI; translate(WIDTH2, HEIGHT2); rotateX(-map(mouseY, 0, width, 0, TWO_PI)); rotateY(angoloR); scale(DIM); for(int i=0; i<numSpigoli; i++) { if(spigoli[i] != null) spigoli[i].draw(); } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ class Punto { float x, y, z; Punto(float nx, float ny, float nz) { x=nx; y=ny; z=nz; } } class Linea { Punto p1, p2; Linea(Punto np1, Punto np2) { p1=np1; p2=np2; } void draw() { line( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z ); } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++