Python中生成等间距点的圆形发生器

2024-05-18 06:53:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是在一个不可见的圆的同心环上生成均匀(或多或少)间隔的点。该函数应将半径列表和要为给定半径绘制的点数作为参数。例如,半径为0时,应在(0,0)处绘制1点。对于半径为1的圆,它应该沿着圆的圆周绘制10个点,以2pi/10的角度隔开。对于半径为2的圆,沿圆周20点,以2pi/20的角度隔开。

发电机应采用以下参数:

n,rúmax,m

应该在半径处生成坐标对环

对于i=0,1,…,n,r_i=i*r_max/n

每个环的n*i点应均匀分布在θ内,其中 n_i=1表示i=0;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循环。

非常感谢


Tags: infor参数plotnp半径绘制plt
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()

我不知道python,但这个公式应该有用。

整数环数=0

int n=铃声-1

((n/n+1)*60)-60=点之间的度数(零点环除外,该点为中心

这是一种方法。

import numpy as np
import matplotlib.pyplot as plt

def circle_points(r, n):
    circles = []
    for r, n in zip(r, n):
        t = np.linspace(0, two_pi, n)
        x = r * np.cos(t)
        y = r * np.sin(t)
        circles.append(np.c_[x, y])
    return circles

当您在适当的列表中传递此函数时,一个具有每个圆的半径,另一个具有所需点数,它将返回一个坐标数组列表,每个圆一个。

r = [0, 0.1, 0.2]
n = [1, 10, 20]
circles = circle_points(r, n)

这些可以绘制如下。

fig, ax = plt.subplots()
for circle in circles:
    ax.scatter(circle[:, 0], circle[:, 1])
ax.set_aspect('equal')
plt.show()

enter image description here

在这里我们可以看到更多圆的结果。

n = [1, 10, 20, 30, 40, 50, 60]
r = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
circles = circle_points(r, n)

fig, ax = plt.subplots()
for circle in circles:
    ax.scatter(circle[:, 0], circle[:, 1])
ax.set_aspect('equal')
plt.show()

enter image description here

相关问题 更多 >