/** * @author nizah * @version 0.1 */ package { import flash.display.*; import flash.events.*; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.text.*; /** * * モンテカルロ法で円周率を求めるプログラム */ public class Main extends flash.display.Sprite { /** * 試行回数 */ public var count:Number = 0; /** * 1フレームあたりの試行回数 */ public var perFrame:int = 10; /** * 円の中に入った数 */ public var hit:Number = 0; /** * 半径 */ public var radius:Number; /** * 計算で求めた円周率 */ public var calced_pi:Number; /** * 背景色 */ public var bgColor:uint = 0xFFFFFF; /** * 線の色 */ public var lineColor:uint = 0x000000; /** * 点の色 */ public var pointColor:uint = 0xFF0000; /** * 点のサイズ */ public var pointSize:int = 2; /** * 描画領域 */ public var canvas:Shape; /** * 文字領域 */ public var textCanvas:BitmapData; /** * 結果表示 */ public var resultText:TextField; /** * マージン */ public var margin:int = 10; /** * 文字サイズ */ public var textSize:int = 16; /** * 初期化フラグ */ public var initFlag:Boolean = false; /** * コンストラクタ */ public function Main():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; radius = int(Math.min(stage.stageWidth, stage.stageHeight) / 2) - margin; canvas = new Shape(); canvas.x = stage.stageWidth/2 - radius; canvas.y = stage.stageHeight/2 - radius; var tf:TextFormat = new TextFormat(); tf.size = textSize; tf.font = "MS ゴシック"; resultText = new TextField(); resultText.border = true; resultText.height = textSize*5; resultText.width = textSize*20; resultText.defaultTextFormat = tf; resultText.text = "試行回数: \n円の内部: \n円周率: "; var resultCanvas:Sprite = new Sprite(); resultCanvas.alpha = 0.5; resultCanvas.graphics.beginFill(bgColor); resultCanvas.graphics.drawRect(0,0,resultText.width,resultText.height); resultCanvas.graphics.endFill(); resultCanvas.x = 100; resultCanvas.y = 100; resultCanvas.x = canvas.x + radius*2 - (resultText.width + margin); resultCanvas.y = canvas.y + radius*2 - (resultText.height + margin); resultCanvas.addChild(resultText); addChild( canvas ); addChild( resultCanvas ); addEventListener( Event.ENTER_FRAME, draw); stage.addEventListener( MouseEvent.MOUSE_DOWN, reset); } /** * Event.EVENT_FRAME により呼び出される描画関数 * 点を1つ打つ */ public function draw(event:Event):void { if(! initFlag){ reset(null); initFlag = true; } var x:Number; var y:Number; for(var i:int=0; i