miércoles, 13 de abril de 2011

Fractales con rotación HSV


//Autor Ing Carlos Lino Rengifo

float angulo;
float x,y;
int col;
void setup()
{
  size(800,600);
  background(0);
  col= 0;
  colorMode(HSV);
  angulo = 0;
  x=120;
  y=300;
  koch(5,480);
  curvakoch(3);
  curvapeano(3);
 }
void gira(float ang)
{
  angulo+= PI*ang/180;
}
void salta(float xx, float yy)
{
   x= xx;
   y= yy;
}
void salta(float distancia)
{
  float xx = x+distancia*cos(angulo);
  float yy = y-distancia*sin(angulo);
  salta(xx,yy);
}
void traza(float distancia)
{
  float xx= x+distancia*cos(angulo);
  float yy= y-distancia*sin(angulo);
  col = (col+1)%256;
  stroke(col,255,255);
   line(int(xx),int(yy),int(x),int(y));
  salta(xx,yy);
}
void koch(int nivel, float distancia)
{
  if ( nivel == 0)
  {
    traza(distancia);
   }
  else
  {
    koch(nivel-1,distancia/3);
    //salta(distancia/3);
    gira(60.0);

    koch(nivel-1,distancia/3);
    //salta(distancia/3);
    gira(-120.0);

    koch(nivel-1,distancia/3);
    //salta(distancia/3);
    gira(60.0);
    koch(nivel-1,distancia/3);
  }
}
void curvakoch(int orden)
{
  float distancia = (3*height-30)/(2*1.732);
  x= width/2 - distancia/2;
  y= (distancia/3)*1.732/2+5;
  salta(x,y);
  koch(orden,distancia);
  gira(-120.0);
  koch(orden,distancia);
  gira(-120.0);
  koch(orden,distancia);

}
void peano(int nivel, float distancia)
{
  if (nivel == 0)
  {
    traza(distancia);
  }
  else
  {
    peano(nivel-1,distancia/3);
    gira(-90.0);
    peano(nivel-1,distancia/3);
    gira(90.0);
    peano(nivel-1,distancia/3);
    gira(90.0);
    peano(nivel-1,distancia/3);
    peano(nivel-1,distancia/3);
    gira(90.0);
    peano(nivel-1,distancia/3);
    gira(90.0);
    peano(nivel-1,distancia/3);
    gira(90.0);
    peano(nivel-1,distancia/3);
    peano(nivel-1,distancia/3);
   }
}
void curvapeano(int orden)
{
  float distancia = width/3;
  x= width/2-height/2;
  y=width/2;
  salta(x,y);
  peano(orden,distancia);
}

No hay comentarios:

Publicar un comentario