昨天下午上学而思数学,居然还在讲必修三的几何概型,其中有一道结合了程序框图的题很有意思。
具体思路就是随机生成点,然后依据点的(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命令行简直无法忍受!
嗯,那就这样吧,下午还要刷题。希望大家能够喜欢吧!
喜欢这篇文章?为什么不打赏一下呢?
赏
0 条评论
快来评论~