关于两种在圆内生成随机点方法的区别

首先下图是一个蒙特卡罗方法求圆周率的一个经典案例:

关于两种在圆内生成随机点方法的区别_第1张图片

关于两种在圆内生成随机点方法的区别_第2张图片

 

即主要思想为我们在该矩形中随机生成若干个点,最后有一些落在这个矩形的内接圆内,有的则在阴影部分。即此时 圆内的点数量/生成点的总数=圆的面积/矩形面积=(π*r*r)/(4*r*r)

由此当试验次数(即生成的点)足够多的时候,我们可以计算出圆周率的近似值。并且当随机生成的点越多,则估值越接近于真实值。

 

此时,在矩形中随机生成一个点的方法即

rand一个0~1之间的随机数,然后乘以矩形的边长。随机点的坐标x和y都用这种方式生成。

 

那么,由此我们可以得到第一种在圆内生成随机点的方法,即先在这个圆外画一个外接矩形,然后用以上方法在矩形内生成随机点,然后拒绝掉那些落在圆外面的。最后的结果即是在圆内生成随机点。

 

 

而第二种则是采用极坐标的方法

以圆心为出发点向前走一段距离,随机选择方向(用rand生成一个0到1的随机数然后乘以2π),随机选择向前走的距离(用rand生成一个0到1的随机数然后乘以R)。

然后我们可以通过三角函数求出其坐标(x,y)。

 

我们通常会有一种错误的第一印象,认为两种随机生成点的效果是一样的。

最为直观的方式,我们用matlab的结果展示(生成5000个点):

第一种方法

关于两种在圆内生成随机点方法的区别_第3张图片

第二种方法

关于两种在圆内生成随机点方法的区别_第4张图片

 

即由此可以看出第一种为在整个圆的区域进行均匀分布,而第二种则是越靠近圆心的部分则密度越大。

所以当我们使用第二种方式进行生成随机点的时候,并不能认为落在圆内某一区域的点的数量与总点数之比为该区域和圆的面积之比。

 

*而采用极坐标如果想要生成均匀分布于圆的随机点则只需要将乘以半径的那个0~1之间的随机数进行一次开方运算即可。

你可能感兴趣的:(关于两种在圆内生成随机点方法的区别)