python萌新必看的海龟画图讲解
目录
- 1. 初探海龟绘图
- 1.1 了解海龟绘图的坐标系1.2 海龟绘图的三要素1.3 绘制第一只海龟
最近博主在 CSDN 上看到许多关于海龟画图的案例,如画圣诞树、五角星等,但是都是直接给出了源码以及一些简单的注释,没有对其详细的说明,会让很多初学者迷糊很久,故这里博主详细地对 turtle 模块中的方法进行详解,让广大博友能够做到自由画图。
海龟绘图是 Python 内置的一个比较有趣的模块,模块名称为 turtle。它最初源于 20世纪60年代 的 Logo 语言,之后成为了 Python 的内置模块。海龟绘图提供了一些简单的绘图方法,可以根据编写的控制指令(代码),让一个 “海龟” 在屏幕上来回移动,而且可以在它爬行的路径上绘制图形。通过海龟绘图,不仅可以在屏幕上绘制图形,还可以看到整个绘制过程。另外,海龟绘图对初学者十分友好,它能够轻松地编写出很多有趣的实例。
1. 初探海龟绘图
海龟绘图是 Python 内置的模块,在使用前需要导入该模块,可以使用以下几种方法导入:
1.1 了解海龟绘图的坐标系
在学习海龟绘图之前,需要先了解海龟绘图的坐标系。海龟绘图采用的是平面坐标系,即画布(窗口)的中心为原点(0,0),横向为 x 轴,纵向为 y 轴,x 轴控制水平位置,y 轴控制垂直位置。例如,一个 400×320 的画布,对应的坐标系如下图所示。
在上图中,绿色虚线框为画布大小。海龟活动的空间为绿色虚线框以内。即 x 轴的移动区间为 -200~200,y 轴的移动区间为 -160~160。同数学中一样,表示海龟所在位置(即某一点)的坐标为 (x, y)。
1.2 海龟绘图的三要素
采用海龟绘图有三个关键要素,即方向、位置和画笔。在进行海龟绘图时,主要就是控制这些要素来绘出我们想要的图形。下面分别进行介绍。
- 方向 在进行海龟绘图时,方向主要用于控制海龟的移动方向。主要有以下 3 个方法进行设置left()/lt() 方法:让海龟左转 (逆时针) 指定度数。right()/rt() 方法:让海龟右转 (顺时针) 指定度数。setheading()/seth() 方法:设置海龟的朝向为0(东)、90(北)、180(西)或 270(南)。
- 位置 在进行海龟绘图时,位置主要用于控制海龟移动的距离。主要有以下 6 个方法进行设置:forward(distance):让海龟向前移动指定距离,参数 distance 为有效数值。backward(distance):让海龟向后退指定距离,参数 distance 为有效数值。goto(x,y):让海龟移动到画布中的特定位置。即坐标 (x,y) 所指定的位置。setx(x):设置海龟的横坐标到 ,纵坐标不变。sety(y):设置海龟的纵坐标到 ,横坐标不变。home():海龟移至初始坐标(0,0),并设置朝向为初始方向。
- 画笔 海龟绘图中的画笔就相当于现实生活中绘图所用的画笔。在海龟绘图中,通过画笔可以控制线条的粗细、颜色和运动的速度。关于画笔的详细介绍请看后续。
1.3 绘制第一只海龟
程序运行结果如下:
多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。
圣诞节快到了,用python、turtle画棵圣诞树吧
首先需要安装python环境,如果是新手建议百度一下,有很详细的教程哦,根据电脑的情况去下载对应的python安装包,使用的是python3.7.0的版本,除此之外还有python2 ,和python3是有区别的,但是本人对python2的了解不够深。
安装完环境后,建议大家安装一个python编译器,使用的是pycharm,免费版本的,网上也都有安装教程,挺简单的,而且官方出了汉化插件,可以在file-setting中搜索安装。
编译器也安装完毕后,请打开pycharm,然后我们创建一个project,在project下创建一个python file,建议取名字不要使用中文,创建成功后把代码复制过去,然后在该页面右键-运行(run),按理就可以跑了。
import turtle as t #as就是取个别名,后续调用的t都是turtle
from turtle import *
import random as r
import time
n = 100.0
speed(\”fastest\”) #定义速度
screensize(bg=\’black\’) #定义背景颜色,可以自己换颜色
left(90)
forward(3*n)
color(\”orange\”, \”yellow\”)#定义最上端星星的颜色,外圈是orange,内部是yellow
begin_fill()
left(126)
for i in range(5): #画五角星
forward(n/5)
right(144) #五角星的角度
forward(n/5)
left(72) #继续换角度
end_fill()
right(126)
def drawlight():#定义画彩灯的方法
if r.randint(0, 30) == 0:#如果觉得彩灯太多,可以把取值范围加大一些,对应的灯就会少一些
color(\’tomato\’)#定义第一种颜色
circle(6)#定义彩灯大小
elif r.randint(0,30) == 1:
color(\’orange\’)#定义第二种颜色
circle(3)#定义彩灯大小
else:
color(\’dark green\’)#其余的随机数情况下画空的树枝
color(\”dark green\”)#定义树枝的颜色
backward(n*4.8)
def tree(d, s):#开始画树
if d <= 0: return
forward(s)
tree(d-1, s*.8)
right(120)
tree(d-3, s*.5)
drawlight()#同时调用小彩灯的方法
right(120)
tree(d-3, s*.5)
right(120)
backward(s)
tree(15, n)
backward(n/2)
for i in range(200):#循环画最底端的小装饰
a = 200 – 400 * r.random()
b = 10 – 20 * r.random()
up()
forward(b)
left(90)
forward(a)
down()
if r.randint(0, 1) == 0:
color(\’tomato\’)
else:
color(\’wheat\’)
circle(2)
up()
backward(a)
right(90)
backward(b)
t.color(\”dark red\”,\”red\”)#定义字体颜色
t.write(\”Merry Christmas\”,align =\”center\”,font=(\”Comic Sans MS\”,40,\”bold\”))#定义文字、位置、字体、大小
def drawsnow():#定义画雪花的方法
t.ht() #隐藏笔头,ht=hideturtle
t.pensize(2) #定义笔头大小
for i in range(200): #画多少雪花
t.pencolor(\”white\”) #定义画笔颜色为白色,其实就是雪花为白色
t.pu() #提笔,pu=penup
t.setx(r.randint(-350,350)) #定义x坐标,随机从-350到350之间选择
t.sety(r.randint(-100,350)) #定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始
t.pd() #落笔,pd=pendown
dens = 6 #雪花瓣数设为6
snowsize = r.randint(1,10) #定义雪花大小
for j in range(dens): #就是6,那就是画5次,也就是一个雪花五角星
#t.forward(int(snowsize)) #int()取整数
t.fd(int(snowsize))
t.backward(int(snowsize))
#t.bd(int(snowsize)) #注意没有bd=backward,但有fd=forward,小bug
t.right(int(360/dens)) #转动角度
drawsnow()#调用画雪花的方法
t.done() # 完成,否则会直接关闭
转载:CSDN博主「Ding2langdang」https://blog.csdn.net/Ding2langdang/article/details/121491593
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。