Python易学就会(五)turtle绘制椭圆与递归

您所在的位置:网站首页 turtle库画圆弧 Python易学就会(五)turtle绘制椭圆与递归

Python易学就会(五)turtle绘制椭圆与递归

#Python易学就会(五)turtle绘制椭圆与递归| 来源: 网络整理| 查看: 265

  前两篇文章基本涵盖了turtle的大部分功能,同时也借由对turtle功能的展示,厘清了Python的一些语法特点,以利于新手入门。但是短短几个例子,阐述得还是有限,这里再展开两个知识点,一方面对turtle做个补遗,另一方面把Python语法的大框架过完一遍。

  第一个是画椭圆。上一节中描述了如何用turtle画一个圆,或者是一段弧线,但是在很多图形中需要用到椭圆,如何画出一段优美的椭圆,是本篇的第一个知识点。

  上节中有提到turtle中的circle()方法,其核心就是割圆术,也就是用正多边形来模拟一个圆。我们知道,正8边形比正6边形肯定要更接近一个圆,正16边形比正8边形又更接近一个圆,如果我们能画出一个正120边形,或者正360边形的话,那是非常接近一个圆的。下面就沿着这个思路,来画一个正120边形。不用说,在普通个人电脑上,“正120边形”在我们眼里肯定它就是一个“圆”了。上代码:

import turtle as t t.pendown() t.setheading(90) # 朝上(正北方向) for j in range(120): # 重复执行120次 t.forward(3) # 移动3个单位 t.left(3) # 左转3度 t.penup() t.done()

  运行这个例子,可以看到turtle从原点出发,按逆时针方向画了一个圆。如果修改forward()中的参数,可以画出不同半径的圆。

  这个画法跟circle()本质上没有区别。但是,却给了我们更大的自由度,来操控这段曲线,例如,修改代码如下:

import turtle as t t.pendown() t.setheading(90) for j in range(60): # 重复执行60次 t.forward(3) t.left(3) t.penup() t.done()

  将重复运行的次数改为60次,每次还是转动3度,我们就可以得到一段60*3=180度的弧线。在不同的角度区间内,修改画弧的速度,也即修改forward()走的快慢,我样就可以得到一段椭圆弧,看代码:

import turtle as t t.pendown() t.setheading(90) len = 1 # 设置初始走的速度为1 for j in range(60): if j < 30: # 当j 15): # 递归的退出条件 list = [] # 新画笔列表 for p in plist: # 遍历旧画笔列表 p.forward(len) q = p.clone() p.left(65) q.right(65) list.append(p) # 存入新画笔列表 list.append(q) # 存入新画笔列表 branch(list, len * 0.65) # 递归,list为新画笔列表,树枝长65% branch([p], 200) turtle.done()

  运行这段代码,可以看到turtle在界面上递归的画出一棵树。

  这棵树上的每一个小箭头,都代表着一个turtle的Pen对象。也就是说,我们通过不断的克隆Pen,来实现让每个树枝都能向左右两边伸展。而每一次伸展的长度都是上一个树枝的0.65倍,也就是越伸越短。当短到



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3