2013-04-09 18 views
0

我知道,答案應該是我的座標的60%左右躺下內這一點,但我只是收到大約20%如何計算半徑爲35和65的兩個圓之間有多少個座標?

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

你怎麼知道,如果你使用的是隨機數? – squiguy 2013-04-09 22:56:00

+0

過那麼大的一個樣本應該只是着眼於區域 – blablabla 2013-04-09 22:57:24

回答

3

問題是這樣的線:

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

這是檢查座標是否以原點爲中心的半徑35的圓形,以原點爲中心的半徑65的圓之間。

但是由於您正在測試的座標總是處於正向正象限中,因此您所期望的圓周內只有1/4的座標位於圓圈內。

最簡單的解決方法是將randint調用更改爲使用(-50, 50)而不是(0, 100)

+2

他的圈半徑35和半徑65 – sean 2013-04-09 23:02:55

+0

檢查半徑65的圓到60%非常接近,所有點都滿足x^2 + Y^2 = 65^2,所以公式是檢查那些*半徑*,而不是直徑的圓。 – jwodder 2013-04-09 23:03:34

+0

糟糕,你是對的,所以這只是第二個問題。我會編輯它。 – abarnert 2013-04-09 23:04:03

0

不,你應該少於30%。你只填充第一象限!

這裏有一個情節:

enter image description here

+1

這情節不顯示(四分之一)圈,所以很難得到太多信息出來吧...... – abarnert 2013-04-09 23:05:33

+0

是的。但重點是在其他三個象限中沒有任何東西。 – lollercoaster 2013-04-09 23:10:14

2

你的面積是10000,在第一象限。你正在尋找面積爲

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

這是2356 ...或總面積的23.56%。所以,你正在得到正確的答案。

順便說一句,你的代碼不需要那些pylab和numpy導入。

+1

我認爲你的意思是'65 ** 2 - 35 ** 2',而不是'*'。 – abarnert 2013-04-09 23:08:04

+0

你是對的 - 我應該顯示的公式爲代碼第一次這樣反覆*會正確顯示。 – 2013-04-09 23:10:40

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

+0

不錯的視覺示範。 – abarnert 2013-04-09 23:23:55

相關問題