- 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 ); }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++