気晴らしにProcessingでローレンツ・アトラクタを書いてみました。
ローレンツ方程式は以下のとおりです。
これを解いて dx, dy, dz を求めます。
これをProcessingで描画します。
float x = 0.01; float y = 0.01; float z = 0.01; float dx; float dy; float dz; float dt = 0.02; float p = 10; float r = 28; float b = 8/3; final int POINT_SIZE = 10000; float [][] pointAry = new float[3][POINT_SIZE]; void setup() { size(500, 500, P3D); //noStroke(); colorMode(RGB, 255); smooth(); frameRate(1); for(int i=0; i<POINT_SIZE; i++) { dx = (- p*x + p*y) * dt; dy = (- x*z + r*x - y) * dt; dz = ( x*y - b*z) * dt; x += dx; y += dy; z += dz; pointAry[0][i] = x*7; pointAry[1][i] = y*3; pointAry[2][i] = z*5; } } void draw() { translate(width/2, height/2, 30); for(int i=0; i<POINT_SIZE; i++) { stroke(255, 0, 0, 100); point(pointAry[0][i], pointAry[1][i], pointAry[2][i]); } saveFrame(); }
出来上がりはこんな感じです。