我被赋予生成一个不可见圆的同心圆上均匀(或多或少)分布点的任务。该函数应该接受半径列表和给定半径绘制点的数量作为参数。例如,对于半径为0,它应在(0,0)处绘制1个点。对于半径为1的圆,应沿着圆的周长绘制10个点,间隔为2pi / 10度。对于半径为2的圆,在周长上绘制20个点,间隔为2pi / 20度。
生成器应采用以下参数:
n,r_max,m
并应在半径为ri = i * r_max / n(其中i = 0,1,..,n)的坐标对上生成圆环。
每个圆环应该有n * i个在θ上均匀分布的点,其中 n_i = 1 for i=0; n_i = mi for i>0
当以以下方式调用函数时:
生成器应采用以下参数:
n,r_max,m
并应在半径为ri = i * r_max / n(其中i = 0,1,..,n)的坐标对上生成圆环。
每个圆环应该有n * i个在θ上均匀分布的点,其中 n_i = 1 for i=0; n_i = mi for i>0
当以以下方式调用函数时:
for r, t in genpolar.rtuniform(n=10, rmax=0.1, m=6):
plot(r * cos(t), r * sin(t), 'bo')
以下是我目前想到的内容:
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循环更有效率的方法。
非常感谢。
circle_points
中定义x = r * np.cos(t)
和y = r * np.sin(t)
的方程吗?如果你用椭圆的方程替换它们,它应该会画出同心椭圆。我需要检查一下,但它们可能存在间距问题。 - Steven C. Howellnp.linspace(0, two_pi, n, endpoint=False)
来使得圆周上有n
个等间距的角度。否则,起始和结束角度会重合。这就是为什么图中显示了9个橙色点和19个绿色点的原因。 - JohanC