博客
关于我
全网最细海龟 (turtle) 画图讲解 (四):绘制图形
阅读量:117 次
发布时间:2019-02-26

本文共 3162 字,大约阅读时间需要 10 分钟。

海龟绘图详解:从基础到高级绘图技巧

海龟绘图是 Python 内置的一个非常有趣的模块,最初来源于 20 世纪 60年代 的 Logo 语言。通过简单的控制指令,开发者可以让一个“海龟”在屏幕上移动并绘制路径,形成丰富的图形。对于初学者来说,海龟绘图模块非常友好,能够轻松实现各种有趣的绘图效果。本文将详细介绍如何利用海龟绘图模块进行图形绘制,包括线条、矩形、圆、多边形、填充图形以及自定义画笔形状等高级技巧。


1. 绘制线条

在海龟绘图中,默认情况下画笔处于“落笔”状态,移动时会绘制出路径线条。通过改变移动方向和位置,可以绘制出各种复杂的线条。以下是绘制线条的常用方法以及一些实例。

1.1 基本绘制方法

通过调整移动距离和旋转角度,可以实现多种线条效果。例如,通过循环移动和旋转,可以绘制出一级台阶、回文图案等复杂图案。

实例代码 1
import turtleturtle.color("blue")  # 设置画笔颜色为蓝色turtle.forward(40)    # 向前移动40像素turtle.left(90)      # 逆时针旋转90°turtle.forward(20)   # 向前移动20像素turtle.right(90)    # 顺时针旋转90°turtle.forward(20)   # 向前移动20像素# 以此类推,可以绘制出一级台阶turtle.done()
运行效果

运行上述代码后,可以看到一条由蓝色线条组成的复杂路径。

实例代码 2
import turtleturtle.color("green")  # 设置画笔颜色为绿色for i in range(32):    turtle.forward(i * 2)  # 向前移动i*2像素    turtle.left(90)        # 逆时针旋转90°turtle.done()
运行效果

运行上述代码后,可以看到一个逐渐扩大、形成回文图案的绿色线条。


2. 绘制矩形

虽然海龟绘图模块中没有直接提供绘制矩形的方法,但可以通过旋转和移动来实现矩形绘制。以下是一个绘制彩色矩形的实例。

实例代码 3

import turtleturtle.shape("turtle")   # 设置海龟光标为标准形状turtle.width(3)          # 设置画笔粗细为3像素turtle.color("orange")   # 设置画笔颜色为橙色# 画矩形的上边框turtle.forward(200)      # 向前移动200像素turtle.left(90)         # 逆时针旋转90°turtle.color("red")      # 画笔颜色转为红色turtle.forward(100)     # 向前移动100像素turtle.left(90)         # 逆时针旋转90°turtle.color("green")   # 画笔颜色转为绿色turtle.forward(200)     # 向前移动200像素turtle.left(90)         # 逆时针旋转90°turtle.color("purple")   # 画笔颜色转为紫色turtle.forward(100)     # 向前移动100像素# 隐藏海龟光标turtle.ht()turtle.done()
运行效果

运行上述代码后,可以看到一个彩色矩形,其每条边的颜色依次为橙色、红色、绿色和紫色。


3. 绘制圆或弧形

海龟绘图模块提供了 circle() 方法,用于绘制圆或圆弧。该方法支持多种参数,允许开发者实现复杂的圆形绘制。

3.1 绘制完整圆

import turtleturtle.color("red")  # 设置画笔颜色为红色radius = 80          # 定义圆的半径turtle.circle(radius, None)  # 绘制完整圆turtle.done()

3.2 绘制半圆

import turtleturtle.color("green")  # 设置画笔颜色为绿色radius = 80          # 定义圆的半径turtle.circle(radius, 180)  # 绘制半圆弧turtle.done()
运行效果

运行上述代码可以分别看到一个红色圆和一个绿色半圆。


4. 绘制多边形

通过循环移动和旋转,可以绘制各种正多边形。海龟绘图模块支持通过 circle() 方法绘制正多边形,也可以通过循环实现。

4.1 通过 circle() 方法绘制正多边形

import turtleradius = 100         # 定义正多边形的半径turtle.circle(radius, steps=8)  # 绘制正8边形turtle.done()
运行效果

运行上述代码可以看到一个红色正8边形。

4.2 通过循环绘制多边形

import turtleside = 8             # 定义边数color_list = ["pink", "purple", "skyblue", "cyan", "green", "lime", "orange", "red"]turtle.width(2)      # 设置线粗2像素for i in range(8):    turtle.color(color_list[i])  # 设置边框颜色    turtle.forward(60)      # 移动60像素    turtle.left(180 - (side - 2) * 180 / side)  # 计算旋转角度turtle.done()
运行效果

运行上述代码可以看到一个彩色边框的正8边形。


5. 绘制填充图形

海龟绘图模块支持填充图形绘制。通过 begin_fill()end_fill() 方法,可以将绘制的图形填充为当前画笔颜色。

实例代码 4

import turtleturtle.color("green")  # 设置填充颜色turtle.begin_fill()     # 标记填充开始turtle.circle(100, steps=8)  # 绘制正8边形turtle.end_fill()      # 标记填充结束turtle.ht()           # 隐藏画笔turtle.done()
运行效果

运行上述代码后,可以看到一个绿色实心正8边形。


6. 自定义画笔形状

海龟绘图模块支持自定义画笔形状。通过 register_shape()addshape() 方法,可以将绘制的图形定义为画笔形状。

实例代码 5

import turtle# 记录正八边形的坐标点turtle.begin_poly()turtle.circle(100, steps=8)turtle.end_poly()p = turtle.get_poly()# 将正八边形定义为画笔形状turtle.addshape("mr", p)turtle.shape("mr")  # 设置画笔形状为"mr"for i in range(20):    turtle.left(90)  # 逆时针旋转90°turtle.done()
运行效果

运行上述代码后,画笔形状为绿色实心正八边形,并在屏幕上绘制出由正八边形组成的路径。


通过以上方法,开发者可以充分利用海龟绘图模块实现各种绘图效果。无论是简单的线条绘制,还是复杂的填充图形和自定义画笔形状,都可以通过海龟模块轻松实现。

转载地址:http://gtyk.baihongyu.com/

你可能感兴趣的文章
Node-RED中Switch开关和Dropdown选择组件的使用
查看>>
Node-RED中使用html节点爬取HTML网页资料之爬取Node-RED的最新版本
查看>>
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>
Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
查看>>
Node-RED中使用range范围节点实现从一个范围对应至另一个范围
查看>>
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
查看>>
Node-RED中建立TCP服务端和客户端
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中建立静态网页和动态网页内容
查看>>
Node-RED中解析高德地图天气api的json数据显示天气仪表盘
查看>>
Node-RED中连接Mysql数据库并实现增删改查的操作
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>
Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件
查看>>
Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
查看>>