将C算法转化为代码:随机坐标圆内判断条件咨询
用蒙特卡洛法估算π的圆内点判断条件
嘿,这个问题太经典了!咱们直接说核心:判断坐标(x,y)是否在圆心在原点、半径为1的单位圆内,靠勾股定理推导就行——点到原点的距离平方不超过半径的平方(这么做能避免开根号,计算更快)。
具体的判断代码逻辑是:
if (x*x + y*y <= 1) { numDartsInCircle += 1; }
验证你给出的例子:
- 对于点
(-1, 1):计算得(-1)*(-1) + 1*1 = 2,2 > 1,所以不在圆内,和你描述的一致。 - 你提到的
(-1, 0.5):这里其实计算结果是(-1)*(-1) + 0.5*0.5 = 1.25,1.25 > 1,按道理这个点是在圆外的,可能是笔误啦?比如换成(-0.5, 0.5)的话,计算得0.25+0.25=0.5 ≤1,才会落在圆内~
小补充:
为啥用平方比较而不是直接算距离√(x²+y²)?因为开根号是相对耗时的运算,用平方对比的话,结果完全一致,但能让你的蒙特卡洛模拟跑起来更高效,尤其是当循环次数拉得很大的时候(比如你这里的1000次,甚至十万、百万次)。
把这个条件代入你的伪代码,最后用 (numDartsInCircle / 1000) * 4 就能得到π的估算值啦——原理很简单:正方形面积是4(边长2),单位圆面积是π,所以圆内点的占比≈π/4,反过来π≈4×占比。
内容的提问来源于stack exchange,提问作者Tosh
相关产品推荐
相关产品推荐

