// Nautilus generado a partir de la Serie de Fibonacci // según el diseño de Durero // Emiliano Causa // 23-Jun-2006 float actual = 0; float ante = 0; BImage imagen; void setup(){ size(800,600); noFill(); imagen = new BImage(); imagen = loadImage("nautilus.jpg"); } void loop(){ background(imagen); int anteLado = 0; int lado = 1; int aux; float paso = 14; float limite = 1.5; float factor = 0.2; actual = (mouseY > actual+limite ? actual+=paso : actual); actual = (mouseY < actual-limite ? actual-=paso : actual); actual = actual * factor + ante * (1-factor); ante = actual; actual = (actual<20 ? 20 : actual); translate(0,0,linea(actual,20,600,500,-100000)); translate(400,300); rotateX(linea(actual,0,600,0,radians(80))); rotate(-HALF_PI); for(int i=0 ; i<26 ; i++){ stroke(0,0,255); rect(0,0,lado,lado); stroke(0,255,0); beginShape(LINE_STRIP); curveVertex(0, lado); curveVertex(0, lado); curveVertex(lado * sin(radians(20)) , lado * cos(radians(20))); curveVertex(lado * sin(radians(45)) , lado * cos(radians(45))); curveVertex(lado * sin(radians(70)) , lado * cos(radians(70))); curveVertex(lado, 0); curveVertex(lado, 0); endShape(); translate(-anteLado,0); aux = anteLado; anteLado = lado; lado += aux; rotate(-HALF_PI); } } float linea(float x, float x1, float x2, float y1, float y2){ return (x-x1)/(x2-x1)*(y2-y1)+y1; }