VBScript 计算阴影面积 Monte Carlo 蒙特卡罗


下午在开会期间 济南公司的同事发了一道题在 QQ群上 然后我一看 这题按常规来解的话还不太好弄 但是用 Monte Carlo 蒙特卡罗 算法 计算机来算则是异常的简单(但是只能无限接近答案)

正方形的面积是 20

shadow-area VBScript 计算阴影面积 Monte Carlo 蒙特卡罗 技术 折腾 程序设计

shadow-area

解题思路 就是尽可能的随机撒越多越好的点 然后就统计落在阴影处的点数占总数的比例. 可以通过和圆心距离来判断是否在圆内 圆上还是圆外. 第一次判断是判断点是不是在1/4圆外 然后第二次就判断是否在中间一整个圆内.

monte-carlo-vbscript VBScript 计算阴影面积 Monte Carlo 蒙特卡罗 技术 折腾 程序设计

monte-carlo-vbscript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
' HelloACM.com
Const N = 1000000
C = 0
 
Randomize
For i = 1 To N
    x = Rnd
    y = Rnd
    r = Sqr(x * x + y * y)
    If (r >= 1) Then ' 在四分之一圆外
        r = Sqr((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5))
        If (r < = 0.5) Then ' 距离圆心小于 0.5
             C = C + 1
        End If
    End If
Next
 
Msgbox C / N * 20
' HelloACM.com
Const N = 1000000
C = 0

Randomize
For i = 1 To N
    x = Rnd
    y = Rnd
    r = Sqr(x * x + y * y)
    If (r >= 1) Then ' 在四分之一圆外
        r = Sqr((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5))
        If (r < = 0.5) Then ' 距离圆心小于 0.5
             C = C + 1
        End If
    End If
Next

Msgbox C / N * 20

这种算法有个缺点就是收敛慢 需要很多的点才可以得到一个近似的答案. 上面VBSCRIPT能在短时间内得到一个很不错的近似值了.

英文: https://helloacm.com/area-of-the-shadow-the-monte-carlo-solution-in-vbscript/

GD Star Rating
loading...
本文一共 249 个汉字, 你数一下对不对.
VBScript 计算阴影面积 Monte Carlo 蒙特卡罗. (AMP 移动加速版本)
上一篇: 同一台服务器上多个WORDPRESS站点的一些设置可以移出去
下一篇: 美梦成真 bmw-z4 小跑车

扫描二维码,分享本文到微信朋友圈
f9d8c077154f7f6afda58d25e4b49789 VBScript 计算阴影面积 Monte Carlo 蒙特卡罗 技术 折腾 程序设计

评论