ノイズ木構造
ノイズ木構造
— string s="ごつちやん"; (@gotutiyan_kapi) October 8, 2018
再帰とノイズでえっさほいさとhttps://t.co/L4cClmSyyP#processing #creativecoding pic.twitter.com/4InhLRMLSg
再帰関数で二分木をどわーっと書いて、点をノイズで揺らしてみました。僕の好きなノイズと再帰でごり押しした感じの作品ですが、動的に生成される木構造が良いですね。本当はノードが増えたり減ったりしたときに、辺をニョキッと滑らかに生やしたかったんですが、やり方がよく分かりませんでした。。
コードは以下の通りです。最初の一回だけ、nowDeepが0なので、map(i,0,0,0,360)となってこれはinfinityを返すぞ!と怒られますが、気にしない気にしない。
PIC10 p10=new PIC10(); void setup(){ size(1200,600,P2D); smooth(); } void draw(){ background(0); p10.move(width/2,10,0); } class PIC10 { int nowDeep=0; //現状の最大の再帰の深さ PIC10() { } void move(float x, float y, int i) { float noi=200*noise(100*i+frameCount/700.0); //横の節との間隔 float noitate=200*noise(1000*i+frameCount/700.0); //縦の節との間隔 if (y+noitate>=height-20) { //画面に収まる範囲で再帰をする fill(map(i, 0, nowDeep, 0, 360), 100, 100); ellipse(x, y, 10, 10); nowDeep=i; //再帰を打ち切る際にnowDeepを更新 return; } colorMode(HSB, 400, 100, 100); fill(map(i, 0, nowDeep, 0, 360), 100, 100); ellipse(x, y, 10, 10); stroke(0,0,100); line(x, y, x+noi, y+noitate); line(x, y, x-noi, y+noitate); move(x+noi, y+noitate, i+1); move(x-noi, y+noitate, i+1); } }