forked from: 再帰関数
forked from 再帰関数 (diff: 36)
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
);
}
}
}
