【发布时间】:2020-01-20 13:15:03
【问题描述】:
好吧,假设我们有一个任务是在 python 中使用 turtle 模块绘制嵌套的正多边形。我想出了一个算法来使用函数(func。根据它的大小和顶点数绘制一个多边形,func。将前一个多边形的外接半径转换为下一个多边形的顶点等等)和循环.我遇到的问题是:
- 对于乌龟从前一个多边形的顶点移动到下一个多边形的顶点的移动,我还没有提出一个好的测量方法。如下图所示,嵌套多边形之间没有足够的空间。我所做的只是将移位的大小作为圆周半径之间的差异(如下面的代码所示)
- 从六边形开始,海龟完成每个下一个多边形的形状的点开始向下移动
你能建议我做些什么来改进我的代码?
这是我写的代码:
import turtle
import math
turtle.shape('turtle')
def prmn(num, size, draw):
if draw == True:
angle = 180-(360//num)
turtle.left(180-angle//2)
for i in range(1, num+1):
turtle.forward(size)
if i != num:
turtle.left(180-angle)
else:
turtle.right(angle//2)
if draw == False:
inner_angle = 360//num
inner_radius = (size*math.cos((math.pi/num)))/(2*math.sin(math.pi/num))
outer_radius = size/(2*math.sin((math.pi/num)))
chars = [inner_angle, inner_radius, outer_radius]
return chars
def rad_conv(num, outer_radiu_prev):
inner_angle = 360//num
outer_radiu = outer_radiu_prev/math.cos(math.pi/num)
return outer_radiu
def new_size(num, outer_radiu):
new_size = 2*outer_radiu*math.sin(math.pi/num)
return new_size
def rad_fw(outer_radiu_new, outer_radiu_prev):
turtle.penup()
turtle.forward(outer_radiu_new-outer_radiu_prev)
turtle.pendown()
ns = 40
for i in range(3, 16):
prmn(i, ns, True)
rad_fw(rad_conv((i+1), prmn(i, ns, False)[2]), prmn(i, ns, False)[2])
ns = new_size((i+1), rad_conv((i+1), prmn(i, ns, False)[2]))
这是输出:
它应该是什么样子的:
我稍微改了一下代码,第二部分(funcs.rad_fw, rad_conv, new_size),在这里是:
def rad_conv(num, outer_radiu_prev):
inner_angle = 360//num
outer_radiu = outer_radiu_prev + 20
return outer_radiu
def new_size(num, outer_radiu):
new_size = 2*outer_radiu*math.sin(math.pi/num)
return new_size
def rad_fw():
turtle.penup()
turtle.forward(20)
turtle.pendown()
ns = 60
for i in range(3, 12):
prmn(i, ns, True)
rad_fw()
ns = new_size((i+1), rad_conv((i+1), prmn(i, ns, False)[2]))
但看起来还是不那么整洁
【问题讨论】: