[AS3]利用几何概型计算圆周率
昨天下午上学而思数学,居然还在讲必修三的几何概型,其中有一道结合了程序框图的题很有意思。
具体思路就是随机生成点,然后依据点的(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命令行简直无法忍受!
嗯,那就这样吧,下午还要刷题。希望大家能够喜欢吧!
谢谢老板 Thanks♪(・ω・)ノ
喜欢这篇文章?为什么不打赏一下呢?