2015-11-03 10 views
4

Мне поручено создавать равномерно (более или менее) разнесенные точки на концентрических кольцах невидимого круга. Функция должна принимать список радиусов и количество точек для построения для данного радиуса в качестве аргументов. Например, для радиуса 0 он должен построить 1 точку в точке (0,0). Для круга с радиусом 1 он должен нанести 10 точек вдоль окружности круга, разнесенных на угол 2pi/10. Для круга радиуса 2, 20 точек вдоль окружности, разнесенного на угол 2pi/20.Генератор равномерно расположенных точек в круге в python

Генератор должен принимать следующие параметры:

н, r_max, м

и должны генерировать кольца пары координат по радиусам

R_i = I * r_max/п для г = 0, 1, .., п.

Каждое кольцо должно иметь n * i точек, равномерно распределенных в θ, где n_i = 1 для i = 0; n_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() 

, но я уверен, что существует более эффективный метод с использованием двух для циклов.

Большое спасибо

+0

исправить ваш отступ –

ответ

0

Вы должны цикл по всей окружности для всех радиусов, так что ваш участка вызова в значительной степени застряли с некоторым процессом N M *.

Детали кода могут быть немного улучшены. Для начала ваш список R уже содержит нужные значения; нет необходимости создавать новый список с одинаковыми значениями. Вы можете создать список t с понятным переписчиком.

Это то, что вы хотели?

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

((п/п + 1) * 60) = -60 градусов между точками (для кольца нулевой, что точка является исключением center