经典案例:python蟒蛇的绘制
话不多说,直接上代码,先整体感知turtle图形绘制。
print("python蟒蛇的绘制")
import turtle as t#引入turtle库函数来实现绘图功能
#并使用import...as...使turtle起个小名为t,使代码简洁
t.setup(900,400,200,200)#建立一个宽度为900像素高度为400像素的画布
#窗体左上角坐标为(200,200),以编译器屏幕左上角为绝对原点
t.penup()#画笔抬起
t.fd(-200)#使“小海龟”即鼠标初始位置向反方向移动200像素
t.pendown()#画笔落下
t.pensize(25)#调整画笔粗细为25像素
t.color("green")#调整画笔颜色为绿色
t.seth(-40)#使“海龟”初始朝向为负40度
for i in range(5):#range(5)代表0,1,2,3,4,是for循环的迭代对象
t.circle(40,80)#表示以40为半径,画出角度为80度的弧线
t.circle(-40,80)#表示以-40像素为半径即与刚才方向相反画出80度角的弧线
t.circle(40,40)
t.fd(20)#向前运动20像素,形成脖子
t.circle(32,180)#形成头
t.fd(40*2/3)
t.done()#绘画结束
运行结果:
————————————————————
是不是感觉就这点小图形十几行代码究竟能蕴含多少turtle绘图知识呢?别说,python蟒蛇的绘制作为图像绘制的经典案例,其基本包含了turtle绘图的大数操作与知识。下面我将详细介绍turtle绘图的具体方法。
————————————————————
前言: turtle库函数是python中最常用也是最基本的绘图库函数。turtle意为”海龟”,可以想象每一次的作画都是调用turtle中的库函数使海龟移动,形成痕迹,进而画出各种图形。下面详细介绍控制画笔(海龟)的各种函数。
————————————————————
(1)建立画布函数turtle.setup(a,b,c,d)
◆a表示画布的宽度,b表示画布的高度,c和d是指画布左上角以编译器界面左上角为原点的横纵坐标。
————————————————————
#画布的建立
import turtle as t
t.setup(800,400,200,300)
调试结果:
————————————————————
(2)画笔控制函数turtle.pensize(),turtle.pencolor(),turtle.penup(),turtle.down()
————————————————————
1.turtle.pensize(x) :顾名思义,控制画笔的粗细为x像素
————————————————————
2.turtle.pencolor(): 控制画笔颜色的函数,其参数有三种方式:
第一:◆可以是表示颜色的字符串,且字符串要小些形式。如:turtle.pencolor(“purple”)表示使画笔颜色为紫色。
第二:◆RGB颜色体系中的小数值或者整数值,如:turtle.pencolor(0.63,0.13,0.94)或者turtle.pencolor(160,32,240)均表示使画
笔颜色为紫色。直接给出RGB颜色体系中的三个通道的值来匹配对应的颜色。
第三:◆RGB的元组值,即turtle.pencolor((0.63,0.13,0.94))将其变为一个元组类型的值来引用。
————————————————————
★RGB色彩体系介绍★:
————————————————————
3.turtle.penup() : 是画笔抬起,即海龟在飞行,turtle.pendown(): 画笔落下,即海龟落地,二者主要是为了调整海龟的初始位置,即画笔的起点,从哪里开始画。在画笔抬起期间,一切的运动行进均不在画布上留下痕迹。
————————————————————
★注意:画笔设置后一直有效,直至下一次重新设置。
————————————————————
(3)运动控制函数 turtle.fd(x),turtle.circle(r,extend)和turtle.goto(x,y)
————————————————————
1.turtle.fd(x) 函数:表示向前运动x个像素的距离,注意x可以为负,即表示向当前的反方向运动x个像素的距离。
作用:使海龟走直线。
————————————————————
2. turtle.circle(r,extend)函数:表示以r为半径绘制一个extend角度的弧形。默认圆心在海龟左侧r距离的位置,-r则表示以海龟右侧r位置为圆心开始绘制。角度默认360度为整圆。
作用:使海龟走曲线
————————————————————
3.turtle.goto(x,y)函数:表示让海龟去到以初始位置为原点建立坐标系的坐标为(x,y)的地点
作用:使海龟走直线,点与点的连线
▲绝对坐标如图:
▲运动控制函数小例子:
运动控制函数示例
import turtle as t
t.circle(100)
t.fd(200)
t.fd(-400)
t.circle(100,180)
t.goto(0,0)
运行结果:
————————————————————
(4)方向控制函数: turtle.seth(angle),turtle.left(angle),turtle.right(angle)
————————————————————
第一:绝对角度下的转向:即以海龟初始位置为原点所建立的坐标系下的视角与角度,见下图:
————————————————————
●turtle.seth(45)表示使海龟转向绝对角度中的45度方向
●turtle,seth(-135)表示使海龟转向绝对角度下的-135度方向
如图:
————————————————————
第二:海龟角度下的转向,容易理解。
turtle.left(x),turtle.right(y)表示让海龟分别向左与向右转动x,y 角度。海龟视角如下:
————————————————————
(5)import 引用库函数的使用
————————————————————
1. 首推import…as…函数,即将所引用的库函数起个小名,使得代码简洁★
————————————————————
2. from…import 这一用法也很简洁,但是有个缺点:当引用的库函数很多时,可能会使调用函数重名*
————————————————————
(6)循环语句与range()函数:
————————————————————
第一,range()函数产生循环计数序列,有两种使用方法:
1.range(n): 表示0,1,2,3,4…n-1的这一系列的数字
2.range(m,n):表示m,m+1,m+2…n-1的这一系列数字
————————————————————
第二,循环语句: for i in range(5): i 是循环变量,range(5)称为循环的迭代对象,表示将变量i 从0,1,2,3,4 这五个数字中遍历,实现5次循环
作用:循环重复操作,如画出蟒蛇的例子中画蛇有几节身的时候。
————————————————————
★掌握这些知识后并加以熟练的运用,就可以带着你天马行空的想象力开启你自己的turtle绘图之旅啦!下面来欣赏一下本人初次学会turtle绘图后的杰作,嘿嘿。︿ ︿
————————————————————
(1)送你一朵小红花——圆规作图经常画
import turtle as t
t.penup()
t.fd(-100)#画笔起飞即海龟飞行,往左边移动100个像素,调整其初始位置
t.pendown()
t.penup()
t.pensize(10)#调整画笔的粗细
t.pencolor("red")
t.pendown()
t.circle(150,180)#以150个像素为半径画出一个度数为180的半圆
t.left(90)#调整海龟方向,左转90度
t.circle(150,180)
t.left(90)
t.circle(150,180)
t.left(90)
t.circle(150,180)
运行结果:
————————————————————
(2)七彩棒棒糖——感受下循环的魅力
import turtle as t#给库函数起小名为t,使得代码简洁
t.setup(800,800,200,300)#建立画布
t.pensize(7)#调整画笔粗细为7个像素与颜色为紫色
t.pencolor("purple")
for j in range(3):#循环3次画半圆,每次画完右转45度角
t.circle(150 ,180)
t.right(45)
t.pencolor("black")
for j in range(3):
t.circle(150 ,180)
t.right(45)
t.pencolor("blue")
for k in range(2):
t.circle(150 ,180)
t.right(45)
t.pensize(6)
t.pencolor("blue")
for j in range(3):
t.circle(120 ,180)
t.right(45)
t.pencolor("green")
for j in range(3):
t.circle(120 ,180)
t.right(45)
t.pencolor("red")
for k in range(2):
t.circle(120 ,180)
t.right(45)
t.pensize(5)
t.pencolor("red")
for j in range(3):
t.circle(100 ,180)
t.right(45)
t.pencolor("blue")
for j in range(3):
t.circle(100 ,180)
t.right(45)
t.pencolor("black")
for k in range(2):
t.circle(100 ,180)
t.right(45)
t.pensize(4)
t.pencolor("black")
for j in range(3):
t.circle(80 ,180)
t.right(45)
t.pencolor("purple")
for j in range(3):
t.circle(80 ,180)
t.right(45)
t.pencolor("green")
for k in range(2):
t.circle(80 ,180)
t.right(45)
t.pensize(3)
t.pencolor("green")
for j in range(3):
t.circle(60 ,180)
t.right(45)
t.pencolor("red")
for j in range(3):
t.circle(60 ,180)
t.right(45)
t.pencolor("purple")
for k in range(2):
t.circle(60 ,180)
t.right(45)
t.pensize(2)
t.pencolor("purple")
for j in range(3):
t.circle(40 ,180)
t.right(45)
t.pencolor("blue")
for j in range(3):
t.circle(40 ,180)
t.right(45)
t.pencolor("red")
for k in range(2):
t.circle(40 ,180)
t.right(45)
t.pensize(1)
t.pencolor("red")
for j in range(3):
t.circle(20 ,180)
t.right(45)
t.pencolor("purple")
for j in range(3):
t.circle(20 ,180)
t.right(45)
t.pencolor("black")
for k in range(2):
t.circle(20 ,180)
t.right(45)
t.pensize(10)
t.pencolor("black")#制作棒棒糖杆
t.goto(500,-500)
t.done()
运行结果:
解释:别看代码一百多行,其实本质上就十几行,总共7次外循环,每次外循环内部又有3次内循环,所以也就21次循环,造就出这么个看了有点花眼但又有规律可循的“七彩花球”。小海龟说:“如果你愿意,我可以一直循环画下去。”哈哈哈!︿ ︿
————————————————————