python画螺旋正方形(python画螺旋正方形代码)
如何用python turtle画斐波那契螺旋曲线?
我把矩形和圆弧都用不同颜色填充了,你按照自己的需求修改一下吧,你的题目说的不清楚。
#?Python3.6
#?使用turtle绘制Fibonacci螺旋
def?draw_fibonacci(x):
????#?F0=1
????#?F1=1
????#?Fn=F(n-1)+F(n-2)
????#?产生斐波那契数列,用于查表
????#?像这种计算复杂性指数增长的计算,不要写个函数去每次求一个数
????#?最好的办法是,按照规律写出查找表,用查找的方法来得到数据
????f_list?=?[]
????for?i?in?range(x):
????????if?i?==?0:
????????????f_list.append(1)
????????elif?i?==?1:
????????????f_list.append(1)
????????else:
????????????f_list.append(f_list[i-1]+f_list[i-2])
????#?像素比例
????f0?=?50
????#?设置画笔属性
????turtle.pensize(5)
????turtle.pencolor("black")
????turtle.penup()
????turtle.home()
????turtle.pendown()
????for?i?in?range(0,?len(f_list)):
????????#?绘制速度,1~10个不同速度等级,小于1或者大于10立即绘制
????????turtle.speed(1)
????????turtle.pendown()
????????#?绘制矩形
????????if?i?==?0:
????????????fill_color?=?"black"
????????else:
????????????fill_color?=?(random.random(),?random.random(),?random.random())
????????turtle.fillcolor(fill_color)
????????turtle.begin_fill()
????????turtle.forward(f_list[i]*f0)
????????turtle.left(90)
????????turtle.forward(f_list[i]*f0)
????????turtle.left(90)
????????turtle.forward(f_list[i]*f0)
????????turtle.left(90)
????????turtle.forward(f_list[i]*f0)
????????turtle.left(90)
????????turtle.end_fill()
????????#?绘制圆弧
????????fill_color?=?(random.random(),?random.random(),?random.random())
????????turtle.fillcolor(fill_color)
????????if?i?==?0:
????????????turtle.forward(f_list[i]?*?f0?/?2)
????????????turtle.begin_fill()
????????????turtle.circle(f_list[i]?*?f0?/?2,?360)
????????????turtle.end_fill()
????????????#?移动到一下起点
????????????turtle.forward(f_list[i]?*?f0?/?2)
????????????continue
????????else:
????????????turtle.begin_fill()
????????????turtle.circle(f_list[i]?*?f0,?90)
????????????turtle.left(90)
????????????turtle.forward(f_list[i]?*?f0)
????????????turtle.left(90)
????????????turtle.forward(f_list[i]?*?f0)
????????????turtle.end_fill()
????????#?移动到一下起点
????????turtle.speed(0)
????????turtle.penup()
????????turtle.left(90)
????????turtle.forward(f_list[i]?*?f0)
????????turtle.left(90)
????????turtle.forward(f_list[i]?*?f0)
????turtle.done()
if?__name__?==?"__main__":
????draw_fibonacci(6)
下面是我跑出来的结果:
如何采用Python语言绘制一个螺旋线
打开直接的IDLE软件,也就是Python语言shell的界面。 单击“file”-“new file”新建立一个脚本。 保存文件,在脚本界面中,选中“file”-“save”,就会出现保存的配置界面; 配置文件名并且单击“保存”就可以啦
总结用python绘制正多边形的规律?
如果能够找到规律,可以让代码变得更简单。上述代码中其实就是调用circle()函数四次,每次传入参数不同而已。
我们可以加入循环,循环就是重复不停地做相同的事情;再找到循环变量和画圆参数之间的规律即可。
第一个圆的半径为50,每次按15的节奏递减,直到绘制完半径为5的圆。这样就可以使用range()函数,传入如下参数:range(50,0,-15)。
或者由小到大绘制,传入这样的参数也可以:range(5,51,15)。
还可以这样:循环四次,循环变量i依次为0、1、2、3,再在绘制圆的过程中构造递减的表达式:100/2-i*15。
分析这个表达式,当i等于0时,结果为50,绘制半径为50的圆;当i等于1时,结果为35,绘制半径为35的圆……正好符合题目要求的参数值。
【扩展】思考如何绘制以坐标原点为中心的同心圆呢?
仔细观察画笔绘制圆的轨迹,可发现:默认小海龟从坐标原点出发,逆时针旋转一圈画圆;然后,再回到起始点。
所以,绘制同心圆。我们需要将画笔向下移动一定的距离,即改变y的坐标,x坐标保持不变为0。参考代码如下:
循环体内,每次需要抬笔和落笔功能。
02
案例二:绘制一个正多边形
绘制正多边形有这样一个结论:用360°去除以绘制的边数,即可得到旋转角度。
比如:正三角形的旋转角度(360/3=120°)、正四边形的旋转角度(360/4=90°)、正八边形的旋转角度(360/8=45°)。其他以此类推。
那么,我们要绘制一个正八边形呢?
使用循环结构,循环八次。每次前移一定距离,再旋转(360/边数)的角度,这里旋转的就是45°角。参考代码如下:
有了这样的结论,其他的正多边形都可以信手拈来,小菜一碟了。只需要稍微改几个参数即可。
03
案例三:绘制由多种颜色组成的正螺旋线
比如,这样的图形:
这是由八种颜色组成的正八边形螺旋线结构图,颜色依次为:红(red)、绿(green)、蓝(blue)、黄(yellow)、紫(purple)、橙(orange)、黑(black)、粉(pink)等八种。
绘制思路:
首先,需要创建一个颜色列表list,含有八种颜色元素。
第二,前移一定距离,这个距离值是由小到大逐级递增的过程。
第三,旋转一定角度,可参照案例二的结论。
最后,考虑画笔的颜色,每8次(边数)为一个周期循环颜色列表。
参考代码如下:
其他的正螺旋线,也是如此规律。
【扩展】如果是有一定旋转角度的螺旋线呢?比如,这样的图形:
解题思路:只需要在正螺旋线的基础上,让旋转角度多偏移1-2°即可。修改上述案例中最后一行的代码: