[AS3]利用几何概型计算圆周率

编程那点事 ActionScript 科技 584 字 / 1 分钟

昨天下午上学而思数学,居然还在讲必修三的几何概型,其中有一道结合了程序框图的题很有意思。

具体思路就是随机生成点,然后依据点的(x,y)坐标来计算与圆心的距离,来判断是否落在圆内。

因为牵扯到了随机数,所以主要还是依据概率来算,但是我一想到计算机是伪随机数,便感觉这有点不太科学。

虽然之前在数学书上看到的计算圆周率也是抛针实验什么的…

怀着试一试的想法,我依据题目给的程序框图在AS3中写了代码,挺简单的。

package
{
import flash.display.Sprite;
import flash.text.TextField;

public class calculatePI extends Sprite
{
	public function calculatePI()
	{
		var times: uint = 99999999; //Change the times here!!
		
		var logText:TextField = new TextField;
		logText.text = "Calcuclate...";
		logText.width = 200;
		this.addChild(logText);
		
		var P: Number; //Final result
		
		var M: int, N: int, i: uint;
		M = 0;
		N = 0;
		i = 1;
		
		var xi: Number, yi: Number;
		
		while (i < times) {
			xi = (Math.random() * 10 + 0) / 10;
			yi = (Math.random() * 10 + 0) / 10;
			
			if (xi * xi + yi * yi <= 1) {
				M++;
			} else {
				N++;
			}
			i++;
		}
		
		P = 4 * M / times;
		trace(P);
		
		logText.text = P.toString();
		
	}
}
}

最初将times设置成与题目一样的1000次,得到结果为:3.188

并不是那么准确啊,接着不断把times增大,一直增大到播放器能承受的极限:99999999(虽然这不是CPU的极限,但是Flash播放器在计算超过15s后便会自动停止)

最后得出的结果:3.1416809514168094,大概范围在3.1414-3.1416之间。

嘛,也算是挺接近的吧,毕竟是AS3写的,也别抱太大希望。之后本来想传Github的,谁知那玩意实在是太麻烦,Git命令行简直无法忍受!

嗯,那就这样吧,下午还要刷题。希望大家能够喜欢吧!