turtle是Python中的一个标准库(所以我们不需要另外安装哈),可以非常方面的进行基础图形的绘制,我们可以用它画樱花、画迷宫等很多有意思的图形,接下来我们就看看吧!
OK,废话不多说,我们今天就拿美国队长的盾牌入个门,为啥是它呢?因为简单呗,只有两个基础图形操作,基本绘图操作它都涉及了,不盘他盘谁。。。
在开始之前,我们先来分析一下,在我们实际生活中,我们画画需要用到什么东西?
画笔和纸呀,这不是废话嘛!没错,我们实际生活中要笔和纸进行绘图,那么在turtle中也是如此,我们接下来就看看turtle的笔和纸。
import turtle # 导入turtle库
turtle.setup(1000,1000,100,100) # 设置画布大小
turtle.setup(宽像素,高像素,横坐标位置,纵坐标位置)
turtle.mainloop() # 保持画布一直存在
相信学过tkinter的同学对这几行语句应该不陌生,特别是最后一句,是一毛一样;恕我这里没有找到直接源码,不然我们对照库源码会比较容易理解!
现在我们有了纸,那么笔要怎么设置呢?
我们可以看在在画布的正中间出现了一个红色的箭头,那么这个就是我们画笔的初始形态,这里我们看不出画笔的粗细,那么我们画一条线来看一下:
import turtle
turtle.setup(500,500,500,100)
turtle.pensize(5) # 设置画笔的粗细为5像素
turtle.color('red','red') # 设置画笔的前景色为红色,背景色也为红色
# 这里是什么意思呢?前景色就好比是我们的勾线,背景色就是我们填充的颜色
turtle.forward(100) # 朝画笔的方向画100像素的线段
turtle.mainloop()
好了,现在画布和画笔都有了,我们就可以愉快的来画画了,我们先来看一下这盾牌是长啥样的:
我们可以看到,这玩意就是由四个圆和一个五角星构成的,四个圆大小不一,五角星在正中间;实际生活中画画,肯定是先画轮廓,然后再填充颜色,但是这里我们不是的,我们画一个填充一个,一层一层覆盖上去:
我们之前也说了,画笔默认是在画布的正中央,这玩意转了一圈又回来了,我要是想再画一个小圆,那得挪位置呀!
画布正中央就是坐标(0,0),我们可以用turtle.goto(x,y),改变画笔位置!
import turtle
import time
turtle.setup(1000,1000,500,100)
turtle.pensize(5)
turtle.color('red','red')
turtle.begin_fill() # 开始填充颜色
turtle.circle(200) # 绘制一个半径为200的圆
turtle.end_fill() # 填充颜色完毕
turtle.goto(0,50) # 将画笔移动到(0,50)的位置,即向上移动了50个像素点
turtle.color('white','white')
turtle.begin_fill()
turtle.circle(150)
turtle.end_fill()
turtle.mainloop()
你不会准备一个圆写5行代码吧,这样的代码太冗余了,聪明的同学应该早就封装方法,到时候我们只需要告诉它参数就好了:
def circle(x,y,r,color):
turtle.goto(x,y)
turtle.color(color,color)
turtle.begin_fill()
turtle.circle(r)
turtle.end_fill()
circle(0,0,200,'red')
circle(0,50,150,'white')
circle(0,100,100,'red')
circle(0,150,50,'blue')
现在我们已经把四个圆画好了,就差点亮小星星了,先别急,turtle中可没有直接绘制星形的方法哦!我们不妨回忆一下,我们生活中绘制五角星是怎么画的:
没错,其实就是五条线闭合起来就是五角星了,这里的难点是,五角星的每个角应该是多少度呢?
我们一步一步来看,首先五角星的正中间是个正五边形,那么每个角的度数就是(180*3/5=)108度,那么平角是180度,就可以得出相邻角是72度,等腰三角形底角相同,就可以得出五角星的每个角应该就是36度啦。
那么,现在我们已经知道角度了,我们就可以来画五角星了:
但是怎么旋转画笔呢?用turtle.right(角度)就可以了,这个方法的实际意思是顺时针旋转画笔;
def wjx(x,y,l,color):
turtle.goto(x,y)
turtle.color(color, color)
turtle.begin_fill()
for i in range(5):
turtle.forward(l)
turtle.right(144) # 这里是不是很奇怪,我们不是算出是36嘛,这里怎么是144呢?
# 这里不做解释,太傻,自己体会
turtle.end_fill()
wjx(0,0,100,"white")
现在我们万事俱备只欠东风了,是不是小星星不好放呀,我也是找了好久的位置的:
import turtle
turtle.setup(1000,1000)
def circle(x,y,r,color):
turtle.goto(x,y)
turtle.color(color,color)
turtle.begin_fill()
turtle.circle(r)
turtle.end_fill()
circle(0,0,200,'red')
circle(0,50,150,'white')
circle(0,100,100,'red')
circle(0,150,50,'blue')
def wjx(x,y,l,color):
turtle.goto(x,y)
turtle.color(color, color)
turtle.begin_fill()
for i in range(5):
turtle.forward(l)
turtle.right(144)
turtle.end_fill()
wjx(-48,216,95,"white")
turtle.mainloop()