使用python计算PI值

2025-10-03 11:18:17

1、pi的计算有好多方法,比较好算的一个是蒙特卡洛方法, 它利用圆与其外接正方形面积之比为pi/4的关系,通过大量均匀分布点,计算落在单位圆和单位正方形的数量之比再乘以4便得到pi的近似值。

也就是这个性质:正方形内部有一个相切的圆,它们的面积之比是π/4(初中数学学的)

2、方法:

1)给出随机点,画圆

2)通过距离判断点在圆内还是圆外,然后统计圆内点的数量

import cv2  as cvimport  numpy as npimport copyimport osfrom random import randomfrom random import randintfrom math import sqrt

image = np.zeros((500, 500, 3), dtype="uint8")red = (0, 0, 255) #8green = (0, 255, 0)cv.rectangle(image, (0, 0), (500, 500), red)cv.imshow("rectangle", image)

这是一个500*500的正方形,500是为了看起来方便,毕竟取1太小了看不见。

使用python计算PI值

3、给出样本值

num = 1000   样本值drawpoint = 0   打点数量for i in range(1,num):    x,y=randint(0,500),randint(0,500)   随机整数    point = (x,y)    cv.circle(image, point, 1, green, 1)   打点    position = sqrt(x**2+y**2)    if position <= 500:  #  统计比较        drawpoint = drawpoint+1   累加    pi = 4*(drawpoint/num)    求PIprint(pi) 

cv.imshow("drawpoint", image)

 我们随机打出了num个点。

使用python计算PI值

使用python计算PI值

4、画内切圆,这样就好看了

ptCenter = (0, 0) # 中心点位置axesSize = (500, 500) # 长轴半径为500,短轴半径为500rotateAngle = 0 # 旋转角度为 0startAngle = 0endAngle = 360point_color = (0, 0, 255)  thickness = 1lineType = 1cv.ellipse(image, ptCenter, axesSize, rotateAngle, startAngle, endAngle, point_color, thickness, lineType)cv.imshow("pi", image) cv.waitKey(0)

使用python计算PI值

5、再看PI的数值

3.156   样本数 1000

使用python计算PI值

6、我们再增加样本数 10000 观察PI是多少  

看到无数点点 密集恐惧症啊。。。

PI = 3.1504

使用python计算PI值

使用python计算PI值

7、在增加100000

PI = 3.13428

所以 样本点越多,计算出的数据将会越接近真识的pi

使用python计算PI值

使用python计算PI值

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢