0

我知道答案应该是我的坐标的大约 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

谁能告诉我我做错了什么?

4

4 回答 4

3

问题是这一行:

if 35**2 <= (i**2+j**2) <= 65**2:

这是检查坐标是否在以原点为中心的半径为 35 的圆和以原点为中心的半径为 65 的圆之间。

但由于您要测试的坐标始终位于正-正象限中,因此只有 1/4 的坐标会落在您预期的圆圈内。

最简单的解决方法是将randint调用更改为使用(-50, 50)而不是(0, 100).

于 2013-04-09T23:01:33.340 回答
2

你的区域是 10000,在第一象限。您正在查看面积为

pi(65**2 - 35**2)/4  

这是2356 ...或总面积的23.56%。所以,你得到了正确的答案。

顺便说一句,您的代码不需要那些 pylab 和 numpy 导入。

于 2013-04-09T23:04:44.780 回答
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")

输出:

在此处输入图像描述

于 2013-04-09T23:11:12.910 回答
0

不,你应该得到少于 30%。你只是填满了第一象限!

这是一个情节:

在此处输入图像描述

于 2013-04-09T23:04:18.207 回答