Frocessing勉強中(フラクタル) FrocessingWork3 @author naoto koshikawa naoto5959 forked:0favorite:1lines:49license : MIT License modified : 2009-09-10 21:40:15 Embed Tweet package { import flash.events.Event; import frocessing.display.*; import net.user1.utils.getRandInt; [SWF(width=465,height=465,backgroundColor=0x000000, frameRate=12)] /** * FrocessingWork3 * @author naoto koshikawa */ public class FrocessingWork3 extends F5MovieClip2D { //---------------------------------------------------------------------- // static properties //---------------------------------------------------------------------- /** * 三角形は三辺なので3は固定 */ private static const TRIANGLE:int = 3; //---------------------------------------------------------------------- // properties //---------------------------------------------------------------------- /** * 正三角形は1:2:ルート3の三角形を * 2つくっつけた図形なのでそれらの辺の長さを定義 */ private var side1:Number; private var side2:Number; private var route3:Number; //---------------------------------------------------------------------- // methods //---------------------------------------------------------------------- /** * コンストラクタ */ public function FrocessingWork3() { } /** * 再帰する前の準備 * @param event */ public function draw():void { var distanceX:Number = mouseX - stage.stageWidth / 2; var distanceY:Number = mouseY - stage.stageHeight / 2; var sideSize:Number = Math.sqrt(distanceX * distanceX + distanceY * distanceY) * 2; var angle:Number = Math.atan2(distanceY, distanceX); // 1:2:ルート3のうち比率2を求める side2 = sideSize; // 1:2:ルート3のうち比率1をを求める side1 = side2 / 2; // 1:2:ルート3のうち比率ルート3を求める route3 = side1 * Math.sqrt(3); colorMode(HSV, 12, 30, 1); noFill(); translate(stage.stageWidth / 2, stage.stageHeight / 2 + route3 / 6); rotate(angle); // 再帰関数実行 var max:Number = int(sideSize / 100); if (5 < max) max = 5; recursiveDraw(2 + max); } /** * * @param recursionLevel 残りの再帰数 */ private function recursiveDraw(recursionCount:int):void { if (recursionCount-- <= 0) return; // スケールを半分にする scale(0.5); for (var i:int = 0; i < TRIANGLE; i++) { // 現在のキャンバスの状態を記憶する pushMatrix(); // 中心点を三角形の中心点分移動 translate(0, - route3 * (2/ 3)); // 三角形は上の点、下の右の点、下の左の点、の順で描画 stroke(getRandInt(1,12), 10, 1); triangle(0, -route3 * (2/3), side1, route3 / 3, -side1, route3 / 3); // 再帰関数の実行 recursiveDraw(recursionCount); // キャンバスの状態を復元する popMatrix(); rotate(2 * Math.PI / TRIANGLE); } } } } Code Fullscreen Preview Fullscreen kidaipu fractale frocessing Math.max triangle colorMode noFill stroke Math.sqrt Math.atan2 Math.PI int Number