RosslerLine[]lines;floatzoom,rotX,rotY;voidsetup(){lines=newRosslerLine[3];lines[0]=newRosslerLine(0.2,0.1,5.7,1,1,1,0x33FF0000);lines[1]=newRosslerLine(0.2,0.2,5.7,1,1,1,0x3300FF00);lines[2]=newRosslerLine(0.2,0.3,5.7,1,1,1,0x330000FF);size(500,500,P3D);zoom=7.8;rotX=1.0;rotY=-0.8;clearScreen();}voidpreDraw(){pushMatrix();translate(width/2,height/2);rotateX(rotX);rotateY(rotY);scale(zoom);}voidpostDraw(){popMatrix();}voidclearScreen(){preDraw();background(0);stroke(64);line(0,0,0,30,0,0);// draw x-axisstroke(128);line(0,0,0,0,30,0);// draw y-axisstroke(192);line(0,0,0,0,0,30);// draw z-axispostDraw();}voiddraw(){preDraw();for(inti=0;i<lines.length;i++){lines[i].update();}postDraw();}voidkeyPressed(){switch(key){case'+':zoom+=0.2;break;// zoom incase'-':zoom-=0.2;break;// zoom outcase' ':break;// clear screencase'4':rotY-=PI/12;break;// rotate left or rightcase'6':rotY+=PI/12;break;// rotate right or leftcase'8':rotX-=PI/12;break;// rotate up or downcase'2':rotX+=PI/12;break;// rotate down or updefault:println("key["+keyCode+", "+key+"]");return;}clearScreen();println("zoom:"+zoom+" rot:("+rotX+", "+rotY+")");}classRosslerLine{floata=0.2,b=0.2,c=5.7;floatx=1.0,y=1.0,z=1.0;floatdt=0.0015;intstepPerFrame=35;intcol;RosslerLine(floata,floatb,floatc,floatx,floaty,floatz,intcol){this.x=x;this.y=y;this.z=z;this.a=a;this.b=b;this.c=c;this.col=col;}voidupdate(){stroke(col);floatx0=x,y0=y,z0=z;for(inti=0;i<stepPerFrame;i++){floatdx=(-y-z)*dt;floatdy=(x+a*y)*dt;floatdz=(b+z*(x-c))*dt;x+=dx;y+=dy;z+=dz;}line(x0,y0,z0,x,y,z);}}
syat
#9022()
[
Java
]
Rating2/2=1.00
アピールポイントは、キー入力で拡大・回転ができるところと、アルファ値が使えるのできれいな絵が描けるところ。
緑の線は赤や青とふるまいが違うのがわかるでしょうか?
see: Wikipedia:Rössler attractor(en)
Rating2/2=1.00-0+
[ reply ]