forked from: 再帰関数

by hacker_9p8x8mco forked from 再帰関数 (diff: 36)
♥0 | Line 50 | Modified 2010-02-16 02:42:13 | MIT License
play

ActionScript3 source code

/**
 * Copyright hacker_9p8x8mco ( http://wonderfl.net/user/hacker_9p8x8mco )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/mQpg
 */

package{
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	[SWF(width=465,height=465,backgroundColor=0xFFFFFF,frameRate=60)]
	public class FlashTest extends Sprite{
		private var tf:TextField;
		private var g:Graphics;
		public function FlashTest(){
			this.x = this.y =465 * .5;
			g = this.graphics;
			stage.addChild(tf = new TextField());
			
			tf.text = "100";
			g.lineStyle(-1,0);
			g.moveTo(0,0);
			draw(100,0,0,0);
			stage.addEventListener(MouseEvent.MOUSE_DOWN,md);
		}
		private var lineNum:int = 100;
		private function md(e:MouseEvent):void{
			if(mouseX < 0) lineNum -= 10;
			else lineNum += 10;
			if(lineNum <= 0) lineNum = 10;
			tf.text = lineNum.toString();
			g.clear();
			g.lineStyle(-1,0);	
			g.moveTo(0,0);
			draw(lineNum,0,0,0);
		}
		private const linelength:Number = 200;
		private var firstn:int = -1;
		private function draw(n:int,px:Number,py:Number,ang:Number):void{
			if(n<0){
				firstn = -1;
				return;
			}else
			if(firstn == -1)firstn = n;
			g.lineTo(px,py);
			draw(
				--n,
				px + Math.cos(ang) * linelength,
				py + Math.sin(ang) * linelength,
				n % 2 == 0 ?
					ang + 180 / firstn * (firstn - n) * Math.PI / 180 :
					ang + (180 - 180 / firstn * (firstn - n)) * Math.PI / 180
			);
		}
	}
}