我知道答案应该在我的坐标的60%左右,但我只能得到约20%
import random
import pylab
import numpy
pylab.close("all") #all import statements
x = [(random.randint(0,100)) for i in range(3000)] #creating list of x coordinates
y = [(random.randint(0,100)) for j in range(3000)] #creating list of y coordinates
array=zip(x,y) #creating an array by combining the x and y coordinates
counter = 0
for i, j in array:
if 35**2 <= (i**2+j**2) <= 65**2:
counter+= 1
print counter
谁能告诉我我做错了什么?
答案 0 :(得分:3)
问题在于这一行:
if 35**2 <= (i**2+j**2) <= 65**2:
这是检查坐标是否位于以原点为中心的半径为35的圆与以原点为中心的半径为65的圆之间。
但是,由于您正在测试的坐标始终位于正正象限,因此只有1/4的数量会落在您想要的圆圈内。
最简单的解决方法是将randint
来电更改为使用(-50, 50)
而不是(0, 100)
。
答案 1 :(得分:2)
你的区域是10000,在第一象限。您正在查看面积为
的样本pi(65**2 - 35**2)/4
是2356 ...或占总面积的23.56%。所以,你得到了正确的答案。
顺便说一下,你的代码不需要那些pylab和numpy导入。答案 2 :(得分:1)
您可以通过pylab.imshow()
:
import numpy as np
import pylab as pl
y, x = np.mgrid[:100, :100]
d = x**2 + y**2
mask = (35**2 <= d) & (d <= 65**2)
pl.imshow(mask, origin="lower")
输出:
答案 3 :(得分:0)
不,你应该得到不到30%。你只填充第一象限!
这是一个情节: