多语言展示
当前在线:1030今日阅读:39今日分享:10

使用python计算PI值

pi值得计算是一个挺有意思的问题,都知道是3.1415926,但这是怎么算的,可以用python来实现这个功能。
工具/原料
1

pycharm windows7

2

python3 opencv3

方法/步骤
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 sqrtimage = 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太小了看不见。

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个点。

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)

5

再看PI的数值3.156   样本数 1000

6

我们再增加样本数 10000 观察PI是多少  看到无数点点 密集恐惧症啊。。。PI = 3.1504

7

在增加100000PI = 3.13428所以 样本点越多,计算出的数据将会越接近真识的pi

注意事项
1

本例的图只画了1/4园 但是原理是一个意思。

2

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

3

内切圆是打完点再画的,不影响结论。

推荐信息