Cono ruotante

Tag:

Il cono รจ realizzato come una piramide con 36 lati di base

final int   numFACCE       = 36;
final float RAGGIO         = 150,
	    ALTEZZA        = 150,
	    deltaANGOLO    = TWO_PI/numFACCE,
	    deltaROTAZIONE = 0.05,
	    GAP            = PI/6;

float angoloRotazione,
      WIDTH2, HEIGHT2,
      SENO[], COSENO[];
color COLORI[];

void setup()
{
  size(500, 500, P3D);
  frameRate(30);
  noStroke();

  WIDTH2 =width/2;
  HEIGHT2=height/2;
  
  COLORI=new color[numFACCE+1]; 
  for(int i=0; i < numFACCE; i++)
	  COLORI[i]=color(random(0, 125), random(128, 255), random(0, 125));        
  COLORI[numFACCE]=COLORI[0];

  SENO  =new float[numFACCE+1]; 
  COSENO=new float[numFACCE+1];   
  float angolo=0;
  for(int i=0; i < numFACCE+1; i++)
  {
	 SENO[i]   = sin(angolo)*RAGGIO;
	 COSENO[i] = cos(angolo)*RAGGIO;
	 angolo   += deltaANGOLO;
  }  
}

void draw()
{
  background(255);
  angoloRotazione+=deltaROTAZIONE;

  translate(WIDTH2, HEIGHT2);
  rotateX(-map(mouseY, 0, width, -GAP, TWO_PI+GAP));
  rotateY(angoloRotazione);

  solido();  
}

void solido()
{
  beginShape(TRIANGLE_FAN);     // parete laterale
  vertex(0, ALTEZZA, 0);
  for (int i=0; i < numFACCE+1; i++)
  {
	fill(COLORI[i]);    
	vertex(COSENO[i], -ALTEZZA, SENO[i]);
  }
  endShape();

  beginShape(TRIANGLE_FAN);     // base
  vertex(0, -ALTEZZA, 0);
  for (int i=0; i < numFACCE+1; i++)
  {
	fill(COLORI[i]);    
	vertex(COSENO[i], -ALTEZZA, SENO[i]);
  }
  endShape();
}