// Círculo Fractal // Emiliano Causa // hecho con Processing 0068 // 25-Jun-2006 // www.proyecto-biopus.com.ar // Arrastrar[] circu; Fractalizador fractal; int cantidad; float transparencia; Mouse mouse; color col1 , col2 ; int start=400; BImage titu,b; //-------------------------------------------------------------------------- void setup(){ size(800,600); transparencia = 100; col1 = color(0,0,255,transparencia); col2 = color(150,0,255,transparencia); cantidad = 10; fractal = new Fractalizador(cantidad); circu = new Arrastrar[ cantidad ]; for(int i=0 ; i0){ start--; logo(400,250); tint(255,255,255); image(b,400,300); int t=500-start; if(t<0)t=0; tint(t,t,t); image(titu,400,400); }else{ background(0); mouse.actualizar(); //mouse.string(); fractalizar(); dibuja_y_mueve(); agrega_nuevos(); quita_los_de_afuera(); } } //-------------------------------------------------------------------------- void fractalizar(){ int elegido = -1; float maximo = 0; for(int i=0 ; i maximo){ maximo = circu[i].diametro; elegido = i; } } } //println(elegido); if(elegido>-1){ fractal.reiniciar(); float cx = circu[ elegido ].x; float cy = circu[ elegido ].y; float ct = circu[ elegido ].diametro; float ca = circu[ elegido ].angulo; for(int i=0 ; i width) || (circu[i].y < 0 || circu[i].y > height)){ circu[i].estaVivo = false; mouse.capturado = false; } } } } //-------------------------------------------------------------------------- void dibuja_y_mueve(){ for(int i=0 ; i3000){ break; } } maxProfundidad = j-1; } void fractalizar( float factor , float rotacion , int profundidad){ rotate(rotacion); for(int i=0; i1) ellipse( 0 , 0 , tam[i] * factor , tam[i] * factor ); if(profundidad < maxProfundidad){ fractalizar( rel[i] * factor , angu[i] , profundidad + 1 ); } pop(); } } void string(){ println("------------------------------------------------------------"); for(int i=0; i diametroOriginal*lim2 ? diametroOriginal*lim2 : diametro); diametro = (diametro < diametroOriginal*lim1 ? diametroOriginal*lim1 : diametro); } } //girando = (prevAngu != angulo ); float factor = 0.5; float iFactor = 0.5; float estaDife = (angulo-prevAngu); cont++; cont = cont % 5; estaDife = (estaDife > PI ? estaDife - PI : estaDife); estaDife = (estaDife < -PI ? estaDife + PI : estaDife); dife = dife * (1-factor) + estaDife * factor; if(cont==0){ difeInter = difeInter * iFactor + dife * (1-iFactor); } /* println("estaDife="+int(degrees(estaDife)*100)/100); println("Dife="+int(degrees(dife)*100)/100); println("DifeInter="+int(degrees(difeInter)*100)/100); */ girando = (abs(degrees(difeInter)) > 2); prevAngu = angulo; } } } void dibujar(){ if(estaVivo){ ellipseMode(CENTER_DIAMETER); noStroke(); fill(colorFondo); ellipse(x,y,diametro,diametro); if(activado || girando){ fill(colorCentro); ellipse(x , y , diametro * porcCentro , diametro * porcCentro ); float diam2 = diametro * 0.3 * (1-porcCentro) ; float radio2 = diametro * 0.5 * (porcCentro + (1-porcCentro)/2); ellipse( x + radio2 * cos(angulo) , y + radio2 * sin(angulo) , diam2 , diam2 ); } } } } //----------------------------------------------------------------------------------------------------- // MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - MOUSE - //----------------------------------------------------------------------------------------------------- class Mouse{ boolean down; boolean up; boolean drag; boolean capturado; Mouse(){ down = false; up = false; drag = false; capturado = false; } void actualizar(){ if(mousePressed){ if( !drag){ drag = true; down = true; }else{ down = false; } }else{ if(drag){ up = true; drag = false; }else{ up = false; } } } void string(){ println("Up="+(up ? "ON ": "off")+" Down="+(down ? "ON ": "off")+" Drag="+(drag ? "ON ": "off")+" Capturado="+(capturado ? "ON ": "off")); } }