In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Frocessing勉強中(フラクタル)

FrocessingWork3
@author naoto koshikawa
Get Adobe Flash player
by naoto5959 10 Sep 2009
/**
 * Copyright naoto5959 ( http://wonderfl.net/user/naoto5959 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/q5XK
 */

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);
			}
		}
	}	
}