海龟画图(5) 妙手丹青
一、初始化
二、坐标与角度
三、画圆与点与技巧
四、填充颜色与圆内内切多边形
炼 海龟画图
一、初始化
英文:turtle 中文:海龟
海龟能在一个画布上游走,游走的轨迹就形成了绘制的图形。
1.怎么在 Python 编程中找到海龟呢?
答:导入海龟画图工具:
import
turtle
2. 怎么用海龟这个工具?
初始化海龟,例如设置画布大小与位置、画笔颜色、粗细、抬笔还是落笔。
import
turtle
#
导入库
(
必须导入库,后面才能用其他功能
)
#
画布大小与位置,每一行代码自己运行下
turtle.setup(600,400,0,0)
#
长
600
,宽
400
,在左上角
turtle.setup(500,400)
# 长
500
,宽
400
默认中间位置
width:设置窗口的宽度,默认为屏幕的 50%。
height:设置窗口的高度,默认为屏幕的 50%。
startx:窗口距离屏幕左边缘多少距离,负值表示距离右边缘,None 表示窗口水平居中。
starty:窗口距离屏幕上边缘多少距离,负值表示距离下边缘,None 表示窗口垂直居中。
turtle.setup(600,400) 画布的大小 长600,宽400
turtle.pensize(5) 画笔大小 5
turtle.pencolor("red") 画笔颜色 红色
turtle.pendown() 落笔
turtle.penup() 抬笔
turtle.forward(200) 前进 200
turtle.backward(100) 后退 100
turtle.right(90) 右转 90
turtle.left(90) 左转 90
turtle.seth(90) 朝向正上方
练
1
:请编程实现让画笔,往前走
100
,再左转
120
走
100
,再左转
120
走
100
,
最终得到一个正三角形
。
要求:
1.
画布默认在中间 长
600
,宽
400; 2.
画笔大小
6,
颜色蓝色;
import turtle #导入库
# 画布大小与位置
#turtle.setup(600,400) # 长600,宽400,在左上角
#turtle.setup(500,400)# 长500,宽400 默认中间位置
#turtle.pensize(4)
#turtle.pencolor("blue")
# 1.画三角形
# turtle.seth(90) # 向上画
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
二、坐标与角度
海龟画笔
默认
一开始的位置坐标是中间(0,0)位置,
头朝向正右方,角度
seth
为 0;
正上方角度
seth
为 90;正左方角度
seth
为 180;
正下方角度为 270 或-90。
对“练 1”题进行修改,从正上方开始画,该怎么画呢?
用 turtle.goto 可以把画笔移到相应的坐标位置。
turtle.goto(100,0)#移动到(100,0)的位置,画一条 100 长度的直线。

请用两种方式画出一个正方形,如上图:。
要求:1. 画布长 800,宽 600,在(200,200)位置;2.画笔大小 4 颜色紫色;3.
从正下方开始画,边长 200。
# 2.画正方形
turtle.setup(800,600,200,200)
turtle.pensize(4)
turtle.pencolor("purple")
turtle.seth(270)
turtle.forward(200)
turtle.left(90)
turtle.forward(200)
turtle.left(90)
turtle.forward(200)
turtle.left(90)
turtle.forward(200)
turtle.left(90)
# 2.坐标画正方形
turtle.setup(800,600,200,200)
turtle.pensize(4)
turtle.pencolor(
"purple"
)
turtle.seth(270)
#不影响
turtle.goto(200,0)
turtle.goto(200,-200)
turtle.goto(0,-200)
turtle.goto(0,0)
练 3:那如何把正方形画在画布中心位置?
答:
1.初始化完成后,使用抬笔 goto 移到正方形某顶点位置,例如 goto(-100,-100);
2.移好位置,落笔,用“练
2
”的代码修改后即可。
请你来完成下这个大大的作品。
turtle.penup()
turtle.goto(-100,-100)
turtle.pendown()
#画边长200的正方形
turtle.forward(200)
turtle.left(90)
turtle.forward(200)
turtle.left(90)
turtle.forward(200)
turtle.left(90)
turtle.forward(200)
三、画圆与点与技巧
海龟画笔,我们可以调整它的
速度、隐藏还是显示、关闭停止、回到原点
等。
turtle.speed(1) #
设置画笔移动速度为
1
,速度最快为
0
turtle.hideturtle() #
隐藏画笔
turtle.showturtle() #
显示画笔
turtle.home() # 返回原点,回到默认方向,有痕迹
turtle.done() # 停止画笔等待关闭
turtle.speed(2)
# 画笔速度
2
turtle.goto(200,0)
turtle.hideturtle()
# 隐藏画笔
turtle.goto(200,-200)
turtle.goto(0,-200)
turtle.showturtle()
# 显示画笔
turtle.home()
#回到原点与默认方向
turtle.done()
#停止画笔等待关闭
turtle.circle(
半径
,
角度
)
画圆圈
turtle.color(
画笔
,
填充
)
设置画笔颜色,且填充颜色
turtle.dot(
直径
,
颜色
)
画点
turtle.circle(100)
#
半径为正,圆心在画笔箭头方向的左边,顺时针绕圆心画。
turtle.circle(-50)
#
半径为负,圆心在画笔箭头方向的右边,顺时针绕圆心画。
练
4
:请在原点画出上下左右四个圆
(
填空
)
。
要求
: 1.
在原点位置,画笔粗细
5
,每个圆要不同的颜色,半径为
80
。
import turtle
turtle.pensize(5)
turtle. # 原点
turtle. # 默认黑色,画上圆
turtle.seth( ) # 面向上方
turtle.pencolor( ) # 红色
turtle.circle(80) # 画左边圆
turtle.seth(180) # 面向左方
turtle.color( ) # 黄色
turtle.circle(80) # 画下边圆
turtle. # 面向左方
turtle. # 蓝色
turtle. # 画右边圆

练 5:画三个点,连接起来是一个正三角形的样子。
1. 边长 150,要把三角形的中点放在原点位置;
2. 每个点都是不同的颜色,直径为 25;最后隐藏画笔。
#练5:画三个点,连接起来是一个正三角形的样子。
turtle.fillcolor("blue")
turtle.begin_fill()
turtle.pensize(6)
turtle.forward(100)
turtle.dot(25,"green")
turtle.left(120)
turtle.forward(200)
turtle.dot(25,"orange")
turtle.left(120)
turtle.forward(200)
turtle.dot(25,"black")
turtle.left(120)
turtle.forward(100)
turtle.end_fill()
turtle.hideturtle()

四、填充颜色与圆内内切多边形
turtle.fillcolor("red") #设置填充颜色为红色
turtle.begin_fill() #开始填充
turtle.end_fill() #填充结束
turtle.circle(130,steps=6) #
circle(
半径
, steps=
边数
)
先声明要填充的颜 色 turtle.fillcolor("red"), 从什么时候开始填充 。 turtle.begin_fill()到什么时候填充结束 turtle.end_fill()。如上图。
练 6:画一个直径 260 的圆圈,圆内切正六边形,且填充颜色为红色。
#练6:画一个直径260的圆圈,圆内切正六边形,且填充颜色为红色。
turtle.pensize(5)
turtle.fillcolor("red")
turtle.circle(130)
turtle.begin_fill()
turtle.circle(130,steps=6)
turtle.end_fill()
turtle.hideturtle()
炼 海龟画图
1.绘制如下图形,一个正方形,内有三个红点,中间红点在正方形中心。要求如下:

(1)正方形边长为 200,线条为黑色;
(2)圆点的直径均为 20 ,填充颜色为红色,画完后隐藏画笔;
(3)中间圆点的圆心位置为画布正中心,三个圆心之间距离相隔为 40。
2.绘制如下图形:

(1)画一个由一个正方形和一个菱形组成的图形,其中,正方形的边长为 200
象素,菱形的四个顶点均在正方形四条边的中点上;
(2)设置画笔速度为 1;
(3)菱形的填充颜色为红色,所有线条为黑色;
(4)画图结束,隐藏并停止画笔。
3.绘制如下图形,相关参数及要求如下:
(1)画笔起始位置不限,但是整个图形必须要能够在画布中呈现;
(2)大的正方形由四个小正方形组成;
(3)每个小正方形的边长均为 100 像素;
(4)左上角和右下角的正方形填充颜色均为黑色;
(5)所有的线条颜色均为黑色;
(6)绘制完成后,隐藏画笔。

4.作图题: 请使用 turtle 画出如下标志。
要求:
(1)线条颜色为黑色,线条粗细为 10;
(2)圆半径为 50,填充颜色为蓝色;
(3)等边三角形边长为 180;
(4)等边三角形底边中点位置为画布正中心。
5.“天狗吃月亮”是一个古老的神话,以前古人不了解月食这一现象,所以说月
亮被狗吃了,天狗吃月亮是古人对“月食”这一天文现象的简称。月食是自然界
的一种现象,当太阳、地球、月球三者恰好或几乎在同一条直线上时(地球在太
阳和月球之间),太阳到月球的光线便会部分或完全地被地球遮挡,产生月食。
请你设计一段程序完成下列图片的月食现象。
要求
:
(1)海龟的初始位置的坐标为(0,0),月食现象的图片需在整个画布中完整 呈现;
(2)月食现象由两个圆或点组成,分别为半径不同的黄色和白色的圆或点;
(3)绘制半径为 150 的圆或点,并填充颜色为黄色,该图形的中心位置为画布的正中心位置(0,0);
(4)绘制半径为 75 的圆或点,并填充颜色为白色,该图形的中心位置坐标为 (150,0)。
