2015-11-03 23 views
4

我的任務是在不可見圓圈的同心環上生成均勻(或多或少)的間隔點。該函數應該取半徑列表,以及給定半徑的點數作爲參數。例如,半徑爲0時,應在(0,0)處繪製1點。對於半徑爲1的圓,它應該在圓的圓周上繪製10個點,以2pi/10的角度間隔開。對於半徑爲2的圓,圓周上有20個點,以2pi/20的角度間隔開。蟒蛇圈中均勻間隔點的生成器

發生器應採取以下參數:

N,r_max時,米

並且應該產生在半徑

座標對環

R_I = I * r_max時/ N,對於i = 0, 1,...,N。

每個環應該有在θ中均勻分佈的n * i個點,其中 對於i = 0,n_i = 1; n_i個= MI爲I> 0

當函數被調用是這樣的:

for r, t in genpolar.rtuniform(n=10, rmax=0.1, m=6): 
     plot(r * cos(t), r * sin(t), 'bo') 

它應該返回一個情節,看起來像: Plot

這裏是我想出到目前爲止:

def rtpairs(R, N): 
     R=[0.0,0.1,0.2] 
     N=[1,10,20] 
     r=[] 
     t=[] 
     for i in N: 
       theta=2*np.pi/i 
      t.append(theta) 

     for j in R: 
      j=j 
      r.append(j) 

    plt.plot(r*np.cos(t),r*np.sin(t), 'bo') 
    plt.show() 

但我很確定有一個更有效的方法使用兩個for循環。

非常感謝

+0

請修復您的縮進 –

回答

0

你必須通過所有半徑全周循環,所以你情節調用一些M * N個過程非常堅持。

代碼細節可以稍微改進。對於初學者,您的R列表已經擁有您想要的值;沒有必要構建一個具有相同值的新列表。您可以使用直觀的列表理解來構建列表。

這是你想要的嗎?

def rtpairs(R, N): 
    N=[1,10,20] 
    t = [2*np.pi/i for i in N] 

    plt.plot(R*np.cos(t),R*np.sin(t), 'bo') 
    plt.show() 
+0

結果爲3分? – LutzL

+0

不,結果爲3環 - 其中第一個點是退化中心點。 – Prune

3

我想通了。代碼如下:

import numpy as np 
import matplotlib.pyplot as plt 

T = [1, 10, 20, 30, 40, 50, 60] 
R = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6] 



def rtpairs(r, n): 

    for i in range(len(r)): 
     for j in range(n[i]):  
     yield r[i], j*(2 * np.pi/n[i]) 

for r, t in rtpairs(R, T): 
    plt.plot(r * np.cos(t), r * np.sin(t), 'bo') 
plt.show() 
0

我不知道python,但這個公式應該有所幫助。

INT ringNumber = 0

INT N = ringNumber-1

((N/N + 1)* 60)= -60點(度之間除環零,這點是中心