我正在尝试生成这个模式,而不是添加for loops
和近似角度(我认为朝向末尾的角度可能是关闭的)。我想知道是否有人能提供一些关于用更少的代码生成这种模式的见解。你知道吗
最终目标是简单地说明半径以及我希望生成多少层圆
import numpy as np
import matplotlib.pyplot as plt
__author__ = 'George Pamfilis'
def rotate_around_origin(r,angle):
# http://tutorial.math.lamar.edu/Classes/CalcII/PolarCoordinates.aspx
x = r * np.cos(angle)
y = r * np.sin(angle)
return x, y
if __name__ == '__main__':
r = 1
r_cylinder = 1
p1 = (0, 0)
ps = [p1]
angle = 60
# first layer
for i in range(6):
p_new = rotate_around_origin(2*r + (r/2) * 0, np.deg2rad(angle))
ps.append(p_new)
angle += 60
# second layer
angle = 30
for i in range(6):
p_new = rotate_around_origin(3*r+(r/2) * 1, np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 60
for i in range(6):
p_new = rotate_around_origin(4*r+(r/2)*0, np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 60 + 30/2 + 4
for i in range(6):
p_new = rotate_around_origin(5*r+(r/3), np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 60 +30/2 + 4 -8 + 30
for i in range(6):
p_new = rotate_around_origin(5*r+(r/3), np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 60
for i in range(6):
p_new = rotate_around_origin(5*r+(r/1)*1, np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 30
for i in range(6):
p_new = rotate_around_origin(6 * r + (r / 1) * 1, np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 60 +13.75
for i in range(6):
p_new = rotate_around_origin(6*r+(r/1)*1+r/4, np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 46.25
for i in range(6):
p_new = rotate_around_origin(6*r+(r/1)*1+r/4, np.deg2rad(angle))
ps.append(p_new)
angle += 60
angle = 60
for i in range(6):
p_new = rotate_around_origin(6*r+(r/1)*1+r/4 + (r/1.25), np.deg2rad(angle))
ps.append(p_new)
angle += 60
plt.figure(figsize=(20, 20 * (1/1)))
fig = plt.gcf()
# circle1 = plt.Circle((0, 0), 6*r+r+r+r/2+r, color="r")
# this is added just to enclose the pattern.
circle1 = plt.Circle((0, 0), 6*r+r+r+r, color="r")
fig.gca().add_artist(circle1)
for p in ps:
circle1 = plt.Circle((p[0], p[1]), r)
fig.gca().add_artist(circle1)
plt.xlim(-10, 10)
plt.ylim(-10, 10)
plt.show()
求给定大R和层数的小圆半径(环包括中心小圆)
查找水平层数
对于每个水平层,计算第一个和最后一个小圆的位置
工作示例:
相关问题 更多 >
编程相关推荐