海龟绘图简易教程 您所在的位置:网站首页 乌龟的各种形态简笔画 海龟绘图简易教程

海龟绘图简易教程

#海龟绘图简易教程| 来源: 网络整理| 查看: 265

turtle 是 python 内置的一个比较有趣味的模块,俗称 海龟绘图,它是基于 tkinter 模块打造,提供一些简单的绘图工具,海龟作图最初源自 20 世纪 60 年代的 Logo 编程语言,之后一些很酷的 Python 程序员构建了 turtle 库,让其他程序员只需要 import turtle,就可以在 Python 中使用海龟作图。

原文链接|海龟绘图简易教程

1. 基本功能介绍

在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。所以海龟作图也常被用作新手学习 Python 的一种方式。

1.1 Turtle motion (运动控制)

本节中包含了 运动控制 中常用的一些函数

turtle.goto(x,y)

画笔定位到坐标(x,y)

turtle.forward(distance) 向正方向运动 distance 长的距离

turtle.backward(distance) 向负方向运动 distance 长的距离

turtle.right(angle) 向右偏 angle 度

turtle.left(angle) 向左偏 angle 度

turtle.home() 回到原点

turtle.circle(radius, extent=None, steps=None) 画圆形 radius 为半径,extent 为圆的角度

turtle.speed(speed) 以 speed 速度运动

看到这么多函数肯定已经头大了,我们以例题来讲解。 首先画一个边长为100的正方形,然后再以半径为50画出其3/4圆。

# 控制画笔的速度 turtle.speed(5) # 将画笔定位到原点 turtle.goto(0,0) # 从原点开始,画出一个边长为100的正方形 for i in range(4): # 正向运动 100 的距离 turtle.forward(100) # 向右偏 90 度 turtle.right(90) # 将画笔定位到原点 turtle.home() # 画出一个半径为100,占3/4的圆 turtle.circle(50,270)

最后得到以下结果:

这里写图片描述

1.2 Pen control (画笔控制)

本节包含了对画笔的控制函数,常用的如下:

turtle.pendown() 落笔,在此状态下会画出运动的轨迹 turtle.penup() 起笔,在此状态下不会画出运动的轨迹 turtle.pensize(width=None 画笔粗细 turtle.pencolor(*args) 画笔颜色 turtle.fillcolor(*args) 填充颜色 turtle.begin_fill() 开始填充 turtle.end_fill() 结束填充 turtle.write(arg, move=False, align=”left”, font=(“Arial”, 8, “normal”)) 写文字

同样,我们以一个例题来讲解。 画一个正方形并填充,最后写一些文字

# 控制画笔颜色 turtle.pencolor('red') # 落笔 turtle.pendown() # 设置填充颜色 turtle.fillcolor('blue') # 开始填充 turtle.begin_fill() # 从原点开始,画出一个边长为100的正方形 for i in range(4): # 正向运动 100 的距离 turtle.forward(200) # 向右偏 90 度 turtle.right(90) # 结束填充 turtle.end_fill() turtle.penup() turtle.goto(100,-100) turtle.write('Crossin编程教室')

最后的结果是这样 这里写图片描述

同时,我们还可以设置画笔打粗细、画笔的速度等属性,

1.3 Window control (视窗控制)

这里有两个常用的函数

turtle.bgcolor(*args) 设置背景颜色 turtle.bgpic(picname=None) 背景图片填充 设置代码如下

turtle.bgcolor('red') turtle.bgpic(r'yourpic.png') 2. 海龟绘图实例

我们用几个简单的例子讲解海龟绘图的用法。

2.1 用正方形画圆 import turtle for i in range(360): turtle.setheading(i) for i in range(4): turtle.forward(100) turtle.left(90)

360 个正方形每隔 1 度排列,短短几行代码可以生成一个漂亮规则的图形。

这里写图片描述

2.2 红色的五角星

使用填充功能画出一个大红星

import turtle turtle.color('red','red') turtle.begin_fill() for i in range(5): turtle.forward(100) turtle.right(144) turtle.end_fill()

结果如图:

这里写图片描述

2.3练习题

讲的再多也不如自己动手做一做,我们在网上挑选了几张使用 turtle 做的有意思的图片,自己动手试试吧

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

彩蛋 # coding=utf-8 import turtle from datetime import * # 抬起画笔,向前运动一段距离放下 def Skip(step): turtle.penup() turtle.forward(step) turtle.pendown() def mkHand(name, length): # 注册Turtle形状,建立表针Turtle turtle.reset() Skip(-length * 0.1) # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。 turtle.begin_poly() turtle.forward(length * 1.1) # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 turtle.end_poly() # 返回最后记录的多边形。 handForm = turtle.get_poly() turtle.register_shape(name, handForm) def Init(): global secHand, minHand, hurHand, printer # 重置Turtle指向北 turtle.mode("logo") # 建立三个表针Turtle并初始化 mkHand("secHand", 135) mkHand("minHand", 125) mkHand("hurHand", 90) secHand = turtle.Turtle() secHand.shape("secHand") minHand = turtle.Turtle() minHand.shape("minHand") hurHand = turtle.Turtle() hurHand.shape("hurHand") for hand in secHand, minHand, hurHand: hand.shapesize(1, 1, 3) hand.speed(0) # 建立输出文字Turtle printer = turtle.Turtle() # 隐藏画笔的turtle形状 printer.hideturtle() printer.penup() def SetupClock(radius): # 建立表的外框 turtle.reset() turtle.pensize(7) for i in range(60): Skip(radius) if i % 5 == 0: turtle.forward(20) Skip(-radius - 20) Skip(radius + 20) if i == 0: turtle.write(int(12), align="center", font=("Courier", 14, "bold")) elif i == 30: Skip(25) turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-25) elif (i == 25 or i == 35): Skip(20) turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-20) else: turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-radius - 20) else: turtle.dot(5) Skip(-radius) turtle.right(6) def Week(t): week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] return week[t.weekday()] def Date(t): y = t.year m = t.month d = t.day return "%s %d%d" % (y, m, d) def Tick(): # 绘制表针的动态显示 t = datetime.today() second = t.second + t.microsecond * 0.000001 minute = t.minute + second / 60.0 hour = t.hour + minute / 60.0 secHand.setheading(6 * second) minHand.setheading(6 * minute) hurHand.setheading(30 * hour) turtle.tracer(False) printer.forward(65) printer.write(Week(t), align="center", font=("Courier", 14, "bold")) printer.back(130) printer.write(Date(t), align="center", font=("Courier", 14, "bold")) printer.home() turtle.tracer(True) # 100ms后继续调用tick turtle.ontimer(Tick, 100) def main(): # 打开/关闭龟动画,并为更新图纸设置延迟。 turtle.tracer(False) Init() SetupClock(160) turtle.tracer(True) Tick() turtle.mainloop() if __name__ == "__main__": main()

这里写图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有