>>> ARTWORKS >>> WAVE >>> R0.1SX1.0SY3.0T0.3A15.0F0.05P0.5 >>> WAVE3 SOURCE CODE
>>> Processing code:
boolean save=true; String fname; String[] parameters; // Parameters for vertical offset float radius=0.1; float x=-radius; float stepX=5; float base=0.0; FloatList wave; FloatList newWave; int counter=0; // Parameters for the wave float ampl=15.0; float freq=0.05; float phase=0.5; // Parameters for the wave evolution float stepY=3; float tolY=0.3; float sine(float A,float F,float P,float x){ return A*sin(F*x+P); } float setBase(){ float base=ampl+radius; return base; } // return a new wave generated from perturbation of input wave W with tolerance T, // smoothed with a runnig average of window 5. FloatList generateWave(FloatList W, float T){ FloatList nW; nW = new FloatList(); nW = W; float dY; float y=0.0; int N=W.size(); // generate for (int j=0; j<N; j++) { y=W.get(j)*(1+random(-T,T)); nW.set(j,y); } // smooth for (int j=0; j<N; j++) { if (j==1) { nW.set(j,(nW.get(0)+nW.get(1)+nW.get(2))/3.0); } else if (j==N-2) { nW.set(j,(nW.get(j-1)+nW.get(j)+nW.get(j+1))/3.0); } else if ((j!=0) && (j!=N-1)) { float mean=0.0; for (int i=-2; i<=2; i++) { mean+=nW.get(j+i); } nW.set(j,mean/5.0); } } return nW; } FloatList baseWave(float A,float F,float P,float dX) { float x=0.0; FloatList W; W = new FloatList(); while (x<=width) { W.append(sine(A,F,P,x)); x+=dX; } return W; } void setup(){ fname="wave3-R"+radius+"SX"+stepX+"SY"+stepY+"T"+tolY+"A"+ampl+"F"+freq+"P"+phase; parameters = new String[8]; parameters[0]="Filename: "+fname+".jpg"; parameters[1]="Radius: "+radius; parameters[2]="Step X: "+stepX; parameters[3]="Step Y: "+stepY; parameters[4]="Tolerance Y :"+tolY; parameters[5]="Wave amplitude: "+ampl; parameters[6]="wave frequency: "+freq; parameters[7]="wave phase: "+phase; noFill(); background(255); stroke(0); strokeWeight(0.5); strokeJoin(ROUND); size(600,800); smooth(); frameRate(300); base=setBase(); wave = new FloatList(); newWave = new FloatList(); wave=baseWave(ampl,freq,phase,stepX); } void draw(){ curveTightness(5.0); int N=wave.size(); while (base<height-ampl) { println("Creating wave ♯"+counter+" with base="+base); if (counter==0) { beginShape(); for (int i=0; i<N; i++) { curveVertex(i*stepX,base+wave.get(i)); } endShape(); } else { base+=stepY; newWave=generateWave(wave,tolY); beginShape(); for (int i=0; i<N; i++) { curveVertex(i*stepX,base+newWave.get(i)); } endShape(); wave=newWave; } counter++; } if (base>=height-ampl) { if (save) { saveFrame(fname+".jpg"); saveStrings(fname+".txt",parameters); } noLoop(); } }
>>> X | © 2017 Thibaud Latour