Suponha que já saibamos que a fórmula para calcular a área de um círculo é: πr², e a área de um quadrado é r², mas não sabemos o valor específico de π. Os resultados da simulação são mostrados na figura: Comparamos a área s1 do círculo 1/4 com a área s2 do quadrado para obter 1/4π, então π é igual a 4 vezes s1/s2.
O valor máximo dos eixos de coordenadas horizontais e verticais na figura é 1. O arco vermelho é um círculo de 1/4 com a origem como centro e 1 como raio. O método de simulação consiste em gerar aleatoriamente pontos (x, y), onde x e y pertencem ao intervalo (0, 1. Se o ponto estiver dentro de um círculo de 1/4 de raio 1, a área do círculo é contado, e o número total de pontos é contado como a área quadrada.
import random
import matplotlib.pyplot as plt
import numpy as np
def mock(n):
# 画个坐标轴
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
# 随机生成0,1的点
x = random.sample(range(1, n), n - 1)
y = random.sample(range(1, n), n - 1)
xx = [i / n for i in x]
yy = [i / n for i in y]
plt.scatter(xx, yy, color='g')
# 画一个1/4圆
x = np.linspace(0, 1, n)
y = pow(1 - x ** 2, 0.5)
plt.plot(x, y, color='r')
# 计数圆内的点模拟圆面积
count = 0
for (i, j) in zip(xx, yy):
d = pow(i * i + j * j, 0.5)
if d <= 1:
count += 1
# s1/s2*4
print(count / n * 4)
plt.show()
if __name__ == '__main__':
mock(1000)