金曜日, 9月 21, 2007

sketch20070921

図書館で借りた奥村晴彦著『C言語による最新アルゴリズム辞典』読みながらprocessingでsketch。

最新っても8年前のだけど。

lorenzアトラクタを描くアルゴリズムに、色々変な値突っ込んで遊んだ。繰り返しをめちゃめちゃに増やしたり、xとy入れ替えたり。

ドラゴンカーブとかも試したんだけど、どっか間違ってるらしくちゃんと描けてなくておもろい。
いかにもカオス系っぽい感じをなくしつつ、調整すればそれはそれでありなんじゃないかと思いました。視覚効果的には。アルゴリズムグリッチ。

...真面目に勉強します。

python版とかやってる人もいます。
Pythonでアルゴリズム - Konnichiwa, A doumo



これは割と素直な描画のコード。元になってるCのコードみたいに表示位置をうまく指定する関数とか書けなかったので結果見ながら調整してます...。

float a = 10.0;
float b = 28.0;
float c = (8.0/3.0);
float d = 0.01;

float xpen = 0;
float ypen = 0;

int h = 0;
int alp = 0;
int dir = 1;

void setup() {
size(400, 400);
background(255);
smooth();
strokeWeight(0.05);
int k;
float x, y, z, dx, dy, dz;

x = y = z = 1;

scale(14);
translate(14, -20);

for(k = 0; k < 3000; k++) {
dx = a * (y - x);
dy = x * (b - z) -y;
dz = x * y - c * z;
x += d * dx;
y += d * dy;
z += d * dz;
if(k > 100) {
plot(x, z);
}
else {
move(x, z);
}
}
saveFrame("lorenz.tif");
}
void move(float x, float y) {
xpen = x;
ypen = y;
}

void plot(float x, float y) {
if(alp<0 || alp>100) {
dir = -dir;
}
alp = alp + dir;
println(alp);
stroke(0,alp);
//point(x, y);
line(xpen, ypen, x, y);
xpen = x;
ypen = y;
}

0 件のコメント: