Поначалу я начал изучать вышеназванную SinusPlasma, причем изучаемая мною реализация была написана на Scala. Напомню, processing реализован для JVM, а так же в виде javascript-библиотеки, которая транслирует написанный код processing’а в javascript.
Я уже ипомянул, что использовал scala в своих экспериментах, в силу того, что мне нравится этот язык (меньше писать по сравнению с Java).
После того как я получил результат, который был приятен моему глазу я решил портировать его на processing.js (и это было не сложно!) и вот что получилось:
intSCREENWIDTH=220;intSCREENHEIGHT=120;intGRADIENTLEN=150;// magnifairintSPEEDUP=1;// changes speed intSWINGLEN=GRADIENTLEN;// magnitude moving blocks (color diversity)intSWINGMAX=GRADIENTLEN*3-1;// this param affect to color sheme (then his more then colors more)int[]colorGrad=newint[GRADIENTLEN];intminX=0;intmaxX=0;intminY=0;intmaxY=0;voidsetup(){background(200);size(SCREENWIDTH,SCREENHEIGHT);makeGradient();setMaxMinX();setMaxMinY();}voiddraw(){loadPixels();inti=0;intt=frameCount*SPEEDUP;for(inty=minY;y<maxY;y++){for(intx=minX;x<maxX;x++){set(x,y,gradient(int(x*x/4)+int(y*y/4)+t));i=i+1;}}updatePixels();}voidmakeGradient(){intarrlen=GRADIENTLEN;intrf=4;intgf=2;intbf=1;intrd=arrlen;intgd=arrlen/gf;intbd=arrlen/bf/2;for(inti=0;i<arrlen;i++){intr=cos256(arrlen/rf,i+rd);intg=cos256(arrlen/gf,i+gd)/2;intb=cos256(arrlen/bf,i+bd)/2;colorGrad[i]=color(r,g,b);}}intcos256(intamplitude,intx){returnint(cos(x*TWO_PI/amplitude)*127)+127;}intgradient(inti){returncolorGrad[i%GRADIENTLEN];}voidsetMaxMinX(){minX=0;maxX=220;}voidsetMaxMinY(){mixY=0;maxY=120;}