// Sketch for animation for mobile phone company "3". // Time-based computational animation. // // See http://www.unlekker.net/proj/DREIx3x2x2D/ int numObj,numEvent,cnt; float scaleIt,colors[][],zMax,zMin; float tri[][],penta[][],dodo[][]; int dodoNum=30; Event event[]; boolean paused=false; void setup() { // size(240,320); size(576,768); size(300,400); // size(130,173); smooth(); background(255); framerate(25); ellipseMode(CENTER_DIAMETER); rectMode(CENTER_DIAMETER); scaleIt=(float)width/576.0f; initShapes(); colors=new float[5][3]; addColor(0, 100,0,0); addColor(1, 255,00,0); addColor(2, 255,255,0); addColor(0, 0,50,128); addColor(1, 200,40,0); addColor(2, 100,200,0); addColor(3, 255,255,255); cnt=0; zMax=400; zMin=0; numEvent=250; event=new Event[numEvent]; for(int i=0; i=event[i].start && event[i].stateCnt!=-1) event[i].draw(); pop(); if(!paused) cnt++; // Run only to 675 frames == 3*3*3 seconds / 25 fps // then reset if(cnt>675) { cnt=0; for(int i=0; i80) stateCnt+=(int)random(75)+25; D=1/(float)(stateCnt-1); start=(int)random(670-stateCnt); num=100; v=new Vec3D[num]; v[num-1]=new Vec3D(random(width/10),0,0); v[num-1].rotateZ(radians(random(360))); for(int i=0; i95) col=3; col=(int)random(100)%3; type=0; if(start<200) type=0; else if(start<300 && random(100)>99) type=(int)random(100)%4+1; else if(start<400 && random(100)>90) type=(int)random(100)%4+1; else if(start<500 && random(100)>70) type=(int)random(100)%4+1; else if(random(100)>50) type=(int)random(100)%4+1; type=0; rad=random(6)+2; prob=random(100); if(prob>95) rad*=2; else if(prob>90) rad*=4; vD=new Vec3D(rad*0.75,0,0); vD.rotateZ(random(PI*2)); vRot=radians(random(720)+540)/(float)stateCnt; if(random(100)>50) vRot-=vRot; vRot=radians(random(6)-3); xD=(random(2)-1)*rad*0.075; yD=(random(2)-1)*rad*0.075; rot=radians((int)random(20)*36); rotD=radians(random(720)-360-rot); rotD/=(float)(stateCnt-1); } void newMove() { // vD.set(random(2)-1,random(2)-1,random(2)-1); // vD.rotateX(random(PI/6.0f)-PI/12.0f); // vD.rotateY(random(PI/6.0f)-PI/12.0f); // vD.rotateZ(PI/2); if(v[num-1].z>-10) vD.z=-abs(vD.z); moveCnt=(int)random(10)+10; } public void draw() { T=1-D*(float)stateCnt; fract=T; if(fract<0.2) fract=1-fract*5.0f; else if(fract>=0.8) fract=1-(1-fract)*5.0f; else fract=0; fill(colors[col][0],colors[col][1],colors[col][2], 150-150*fract); // 200-abs(200*cos(PI+PI*D*(float)stateCnt))); // fract=abs(sin(PI*0.5+PI*0.5*D*(float)stateCnt)); fract=T; fract*=fract; if(!paused) { rot+=rotD; if(drawCnt