如何计算半径35和65的2个圆之间有多少个坐标?

时间:2013-04-09 22:53:28

标签: python arrays loops counter

我知道答案应该在我的坐标的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 个答案:

答案 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")

输出:

enter image description here

答案 3 :(得分:0)

不,你应该得到不到30%。你只填充第一象限!

这是一个情节:

enter image description here