簡単ブラウザゲーム・スマホ・占い・おみくじなど

ブラウゲームズ

今更ながら、CreateJSでフラクタルツリーを描く

フラクタルツリーの情報は山ほどあるけどね。

 

 

■上部に行くほど細く短い枝に

  • 親枝の先端から2股に分け、小枝を描く
  • 左にθ回転した枝と、右にθ回転する
  • 小枝は、親枝の90%の長さ、1ピクセル細くする
  • 上記を繰り返す

 

DEMOスクリプトはこちら(custom28.js)

 

var stage = new createjs.Stage("mcanvas"); var sh = new createjs.Shape(); stage.addChild(sh); var cnt = 0; function recurv( st_x, st_y, end_x, end_y, vec, cnt ) { if(cnt > 7) { return; } //長さr 角度angleの線を引く var deg = Math.floor( Math.random() * 35 ); //35度以内 var angle = ( deg * (Math.PI / 180) ) * vec; //点(a,b)を中心に座標(x, y)をθ回転した座標 var end_x2 = (end_x - st_x) * Math.cos(angle) - (end_y - st_y) * Math.sin(angle) + st_x; var end_y2 = (end_x - st_x) * Math.sin(angle) + (end_y - st_y) * Math.cos(angle) + st_y; //ライン描画 var linew = cnt; if( cnt < 8 ) { linew = 8 - cnt; } sh.graphics.beginStroke(createjs.Graphics.getRGB(0,0,0)); sh.graphics.setStrokeStyle( linew ); sh.graphics.moveTo(st_x,st_y); sh.graphics.lineTo(end_x2,end_y2); //次の準備 var end_x3 = ( (end_x2 - st_x) * 0.9 ) + end_x2; var end_y3 = ( (end_y2 - st_y) * 0.9 ) + end_y2; cnt++; recurv( end_x2, end_y2, end_x3, end_y3, 1, cnt ); recurv( end_x2, end_y2, end_x3, end_y3, -1, cnt ); } recurv(300, 320, 300, 260, 1, 1); createjs.Ticker.addEventListener("tick", handleTick); function handleTick() { stage.update(); }

 

 

プチゲームトップへもどる