import java.applet.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import java.text.*; 
import java.util.*; 
import java.util.zip.*; 

public class sketch_cubo_fractal2 extends BApplet {
float xmag, ymag = 0;
float newXmag, newYmag = 0;
int Delay=7;
void setup()
{
  size(400, 400);
  colorMode(RGB, 100);
  background(90, 90, 90);
}
void loop()
{

  translate(width/2, height/2, -70);

  newXmag = mouseX/(float)(width) * TWO_PI;
  newYmag = mouseY/(float)(height) * TWO_PI;

  float diff = xmag-newXmag;
  if (abs(diff) >  0.01f) {
    xmag -= diff/Delay;
  }

  diff = ymag-newYmag;
  if (abs(diff) >  0.01f) {
    ymag -= diff/Delay;
  }

  rotateX(ymag);
  rotateY(xmag);
  calculate(80,0,0,0);

}
void calculate (int lato, int xloc, int yloc, int zloc) {
  draw_target(lato,xloc,yloc,zloc);
  if(lato>10){
    calculate(lato/2,xloc+lato*2,yloc,zloc);
    calculate(lato/2,xloc-lato*2,yloc,zloc);
    calculate(lato/2,xloc,yloc+lato*2,zloc);
    calculate(lato/2,xloc,yloc-lato*2,zloc);
    calculate(lato/2,xloc,yloc,zloc+lato*2);
    calculate(lato/2,xloc,yloc,zloc-lato*2);

  }
}
void draw_target(int lato, int xloc, int yloc, int zloc)
{
  push();
  translate(xloc, yloc, zloc);
  fill(lato*3, lato*3, lato*3);
  box(lato);
  pop();
  /*if (lato>10){
    int dist=lato*2
    draw_target(10,0,0,30);
    draw_target(lato/2,xloc,yloc,zloc+dist);
    draw_target(lato/2,xloc,yloc+dist,zloc);
    draw_target(lato/2,xloc,yloc-dist,zloc);
    draw_target(lato/2,xloc+dist,yloc,zloc);
    draw_target(lato/2,xloc-dist,yloc,zloc);
  }*/
}

}