绘制图形
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
在前3节的实例中,我们一直绘制的都是直线,实际上,海龟绘图还可以绘制其他形状的图形,如圆形、多边形等,下面分别进行介绍。
1 绘制线条
在海龟绘图中,画笔处在落笔状态时,只要海龟移动时就会绘制出移动轨迹线条。通过改变移动的方向和位置可以绘制出各种线条。在绘制线条时,主要通过15.1.2小节介绍的控制方向和位置的方法实现。下面通过一个实例来演示如何绘制复杂的线条。
实例15.3 绘制台阶
通过逆时针旋转90度,向前移动,再顺时针旋转90度,并向前移动,可以实现一级台阶的绘制,重复多次这样的操作,就可以绘制出多级台阶的形状,代码如下:
import turtle # 导入海龟绘图模块
turtle.color('blue') # 设置画笔颜色为蓝色
turtle.forward(40) # 向前移动
turtle.left(90) # 逆时针旋转90度
turtle.forward(20) # 向前移动
turtle.right(90) # 顺时针旋转90度
turtle.forward(20) # 向前移动
turtle.left(90) # 逆时针旋转90度
turtle.forward(20) # 向前移动
turtle.right(90) # 顺时针旋转90度
turtle.forward(20) # 向前移动
turtle.left(90) # 逆时针旋转90度
turtle.forward(20) # 向前移动
turtle.right(90) # 顺时针旋转90度
turtle.forward(20) # 向前移动
turtle.left(90) # 逆时针旋转90度
turtle.forward(20) # 向前移动
turtle.right(90) # 顺时针旋转90度
turtle.forward(20) # 向前移动
turtle.left(90) # 逆时针旋转90度
turtle.forward(20) # 向前移动
turtle.right(90) # 顺时针旋转90度
turtle.forward(40) # 向前移动
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,将在屏幕上绘制5级台阶,如图15.21所示。

图15.21 绘制5级台阶
在绘制线条时,结合循环可以绘制出很多复杂、有趣的图案,例如下面的实例。
实例15.4 绘制回文图案
使用海龟绘图结合for循环可以实现回文图案。实现方法:在循环中,不断地增加移动的距离,并向一个方法旋转指定角度即可实现。具体代码如下:
import turtle # 导入海龟绘图模块
turtle.color('green') # 画笔颜色为绿色
# 输出回文图案
for i in range(32): # 循环32次
turtle.forward(i*2) # 向前移动
turtle.left(90) # 逆时针旋转90度
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,将显示如图15.22所示的图案。

图15.22 绘制回文图案
2 绘制矩形
在海龟绘图中,没有提供绘制矩形的方法,不过可以使用旋转+移动位置来实现。下面看一个具
体的实例。
实例15.5 绘制彩色边框的矩形
绘制一个长150像素,宽200像素的矩形,并且每条边的颜色不一样。代码如下:
import turtle # 导入海龟绘图模块
turtle.shape('turtle') # 改变海龟光标的形状为海龟
turtle.width(3) # 画笔粗细
turtle.color('orange') # 画笔颜色为橙色
turtle.forward(200) # 画一条200像素的线
turtle.right(90) # 顺时针旋转90度
turtle.color('red') # 画笔颜色为红色
turtle.forward(100) # 画一条100像素的线
turtle.right(90) # 顺时针旋转90度
turtle.color('green') # 画笔颜色为绿色
turtle.forward(200) # 画一条200像素的线
turtle.right(90) # 顺时针旋转90度
turtle.color('purple') # 画笔颜色为紫色
turtle.forward(100) # 画一条100像素的线
turtle.ht() # 隐藏海龟光标
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,屏幕中逐渐绘制一个彩色边框的矩形,绘制完成后海龟光标将隐藏,如图15.23所示。

图15.23 绘制彩色边框的矩形
如果将图15.23所示的矩形重复旋转多次将得到一个圆形图案。修改后的代码如下:
import turtle # 导入海龟绘图模块
def drawrect(num):
for i in range(1,num+1):
turtle.left(5)
turtle.width(3) # 画笔粗细
turtle.color('orange') # 画笔颜色为橙色
turtle.forward(200) # 画一条200像素的线
turtle.right(90) # 顺时针旋转90度
turtle.color('red') # 画笔颜色为红色
turtle.forward(100) # 画一条100像素的线
320
Python 从入门到实践
turtle.right(90) # 顺时针旋转90度
turtle.color('green') # 画笔颜色为绿色
turtle.forward(200) # 画一条200像素的线
turtle.right(90) # 顺时针旋转90度
turtle.color('purple') # 画笔颜色为紫色
turtle.forward(100) # 画一条100像素的线
turtle.ht() # 隐藏海龟光标可以提升速度
drawrect(100)
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,将看到不断地绘制彩色边框的矩形,最终停留在如图15.24所示的图案上。

图15.24 绘制圆形图案
3 绘制圆或弧形
在海龟绘图中,使用circle()方法可以绘制圆或者弧形。circle()方法的语法如下:
turtle.circle(radius, extent=None, steps=None)
参数说明:
l radius :必选参数,用于指定半径,其参数值为数值。圆心在海龟光标左边一个半径值的位置。
l 如果值为正数,则按照逆时针方向绘制圆弧,否则按照顺时针方向绘制。
l extent :可选参数,用于指定夹角的大小,数值(或None),如果设置为None或者省略,则绘制整个圆。另外,如果指定的值不是完整圆周,将以当前画笔位置为一个端点绘制圆弧。
l steps :可选参数,用于指定边数。对于圆实际上是以其内切正多边形来近似表示的,这里的 steps就是指定的正多边形的边数。如果extent参数省略时,则该参数需要通过关键字参数的形式指定(即需要使用steps = 边数)。
例如,绘制一个红色的,半径为80的圆,代码如下:
import turtle
turtle.color('red') # 设置画笔的颜色
radius = 80 # 定义半径
turtle.circle(radius,None) # 绘制圆
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将绘制如图15.25所示的圆。
再例如,绘制一个绿色,半径为80的半圆弧,代码如下:
import turtle
turtle.color('green') # 设置画笔颜色
radius = 80 # 定义半径
turtle.circle(radius,180) # 绘制半圆弧
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将绘制如图15.26所示的半圆弧。

图15.25 绘制圆

图15.26 绘制弧
实例15.6 绘制五环图案
通过循环绘制5个半径为100的不同颜色的圆形,通过调整位置组成五环图案。代码如下:
import turtle # 导入海龟绘图模块
turtle.resizemode('auto') # 改变模式为自动
radius = 100 # 圆的半径
turtle.width(10) # 画笔粗细
colorlist = ['royalblue','black','red','yellow','green'] # 颜色列表
turtle.penup() # 抬笔
turtle.back(radius*2) # 移动一个圆的距离
turtle.pendown() # 落笔
for i in range(5): # 循环5次
turtle.color(colorlist[i]) # 设置画笔颜色
turtle.circle(radius) # 绘制圆
if i != 2: # 不是第三个圆时
turtle.penup() # 抬笔
turtle.forward(radius*2) # 移动一个圆的距离
turtle.pendown() # 落笔
else:
turtle.penup() # 抬笔
turtle.goto(radius*-1,radius*-1) # 移动到第二行的第一个圆的位置
turtle.pendown() # 落笔
322
Python 从入门到实践
turtle.ht() # 隐藏画笔
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行程序,将在屏幕上绘制由5个圆组成的五环图案,效果如图15.27所示。

图15.27 绘制五环图案
另外,在海龟绘图中,还提供了绘制圆点的dot()方法。通过该方法可以在屏幕上绘制指定大小和颜色的实心圆点。dot()方法的语法如下:
turtle.dot(size=None, *color)
参数说明:
l size :用于指定圆点的直径,参数值为>=1的整型数,省略则取pensize+4和2*pensize中的较大值。
l color :用于指定圆点的颜色,其参数值为颜色字符串或颜色数值元组。
例如,在屏幕上绘制一个蓝色的、直径为50的圆点,代码如下:
import turtle # 导入海龟绘图模块
turtle.dot(50, "blue")
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将在屏幕上绘制如图15.28所示的圆点。

图15.28 绘制圆点
4 绘制多边形
在海龟绘图中,绘制多边形通常有两种方式。一种是通过circle()方法实现,另一种是通过循环旋转、移动实现。下面分别进行介绍。
l 通过circle()方法实现
将circle()方法的参数steps设置为想要的多边形的边数,即可绘制指定边数的正多边形,例如,绘制一个正8边形的代码如下:
import turtle # 导入海龟绘图模块
turtle.color('red')
turtle.circle(100,steps=8) # 绘制正8边形
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将绘制一个正八边形,如图15.29所示。

图15.29 绘制正八边形
l 通过循环旋转、移动实现多边形
在15.4.2小节绘制矩形时,我们通过移动指定距离(表示边长)并旋转(90度)4次绘制出了一个矩形。那么如果把矩形换成正方形,就可以通过循环4次的操作来实现。通过这种方式也可以实现绘制其他的正多边形。关键要素如下:
Ø 循环次数=边数。
Ø 旋转角度=180-内角的度数,内角的度数计算公式为:内角=(边数-2)*180/边数。即旋转角度=180-(边数-2)*180/边数)。
Ø 移动的距离=边长。
例如,要绘制一个彩色边框的正8边形,代码如下:
import turtle # 导入海龟绘图模块
colorlist = ['pink','purple','skyblue','cyan','green','lime','orange','red']
turtle.width(2) # 线粗2像素
side = 8 # 边数
for i in range(side):
turtle.color(colorlist[i]) # 设置边框的颜色
turtle.forward(60) # 边长
turtle.left(180-(side-2)*180/side) # 旋转角度
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将绘制一个彩色边框的正八边形,如图15.30所示。

图15.30 绘制彩色边框的正八边形
5 绘制填充图形
在海龟绘图中,默认绘制的图形只显示轮廓,不会填充,这时可以使用begin_fill()和end_fill()方法绘制填充图形。其中begin_fill()方法放置在绘制要填充的形状之前调用,而end_fill()方法设置在绘制完要填充的形状之后调用,并且要保证前面已经调用了begin_fill()方法。
例如,将15.4.4小节通过circle()方法绘制的正八边形填上绿色,代码如下:
import turtle # 导入海龟绘图模块
turtle.color('green') # 填充颜色
turtle.begin_fill() # 标记填充开始
turtle.circle(100,steps=8) # 绘制正8边形
turtle.end_fill() # 标记填充结束
turtle.ht() # 隐藏画笔
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将显示如图15.31所示的绿色实心正八边形。


相关文章:
绘制图形
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在前3节的实例中,我们一直绘制的都是直线,实际上,海龟绘图还可以绘制其他形状的图形,如圆形、多边形等…...
SpringAop实战(xml文件/纯注解两种方式)
AOP的概述 什么是AOP? 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程 • AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构 • AOP最早由AOP联盟的组织提出的,制定了…...
(八)Linux的进程与线程
多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的程序被称为一个任务。一个任务包含一个或多个完成独立功能的子任务,其中子任务可以是进程或线程。Linux就是一个支持多任务的操作系统,比起单任务系统它的功能增强许多。 一.进程 进程:一个具有独立功…...
Map-JAVA面试常问
1.HashMap底层实现 底层实现在jdk1.7和jdk1.8是不一样的 jdk1.7采用数组加链表的方式实现 jdk1.8采用数组加链表或者红黑树实现 HashMap中每个元素称之为一个哈希桶(bucket),哈希桶包含的内容有以下4项 hash值(哈希函数计算出来的值) Key value next(…...
prometheus+grafana搭建监控系统
1.prometheus服务端安装 1.1下载包 使用wget下载 (也可以直接去官网下载包Download | Prometheus) wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz1.2解压 tar xf prometheus-2.44…...
flink学习-flink sql
动态表 在flink的数据处理中,数据流是源源不断的,是无界的,所以对于flink处理的数据表是一张动态表,所以对于动态表的查询也是持续的,每接收一条新数据会进行一次新的查询。 持续查询 因为数据在一直源源不动的到来…...
高考填报志愿攻略,5个步骤选专业和院校
在高考完毕出成绩的时候,很多人会陷入迷茫中,好像努力了这么多年,却不知道怎么规划好未来。怎么填报志愿合适?在填报志愿方面有几个内容需要弄清楚,按部就班就能找到方向,一起来了解一下正确的步骤吧。 第…...
Kubernetes排错(十)-处理容器数据磁盘被写满
容器数据磁盘被写满造成的危害: 不能创建 Pod (一直 ContainerCreating)不能删除 Pod (一直 Terminating)无法 exec 到容器 如何判断是否被写满? 容器数据目录大多会单独挂数据盘,路径一般是 /var/lib/docker,也可能是 /data/docker 或 /o…...
使用QtGui显示QImage的几种方法
问题描述 我是一名刚学习Qt的新手,正在尝试创建一个简单的GUI应用程序。当点击一个按钮时,显示一张图片。我可以使用QImage对象读取图片,但是否有简单的方法调用一个Qt函数,将QImage作为输入并显示它? 方法一:使用QLabel显示QImage 最简单的方式是将QImage添加到QLabe…...
C++ lamda
1 lamada 的函数指针存在哪里?需要通过分析编译后的二进制; 2 捕获了什么? 为什么捕获?捕获的范围是什么? 捕获的生命周期是什么? lambda 定义匿名函数,使得代码更加灵活简洁; lam…...
Linux_应用篇(27) CMake 入门与进阶
在前面章节内容中,我们编写了很多示例程序,但这些示例程序都只有一个.c 源文件,非常简单。 所以,编译这些示例代码其实都非常简单,直接使用 GCC 编译器编译即可,连 Makefile 都不需要。但是,在实…...
51单片机STC89C52RC——8.1 8*8 LED点阵模块(点亮一个LED)
目录 目的/效果 一,STC单片机模块 二,8*8 LED点阵模块 2.1 电路图 2.1.1 8*8 点阵模块电路图 2.1.2 74HC595(串转并)模块 电路图 2.1.3 芯片引脚 2.2 引脚电平分析 2.3 74HC595 串转并模块 2.3.1 装弹(移位…...
2024最新免费版轻量级Navicat Premium Lite 下载和安装教程
2024最新免费版轻量级Navicat Premium Lite 下载和安装教程 关于猫头虎 大家好,我是猫头虎,别名猫头虎博主,擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品评…...
PHP+laravel 生成word
此功能较为繁琐我会从源头讲起 首先是数据库设置,下面是我的数据库结构 合同模版表 CREATE TABLE contract_tpl (id bigint unsigned NOT NULL AUTO_INCREMENT,name varchar(191) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 合同名称,file varchar(191) COLL…...
redis集群简单介绍及其搭建过程
Redis集群 1、哨兵模式 哨兵可以有多个,从服务器也可以有多个,从服务器也可以有多个,在Redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会实现主从切换&#x…...
linux桌面运维----第五天
1、创建用户命令useradd: 作用:创建用户 语法:useradd [选项名] 用户名 选项: -d<登入目录> 指定用户登入时的起始目录。 【掌握】 -g<群组> 指定用户所属的群组(基本组)。【掌握】…...
【SQL Server数据库】简单查询
目录 用SQL语句完成下列查询。使用数据库为SCHOOL数据库 1. 查询学生的姓名、性别、班级名称,并把结果存储在一张新表中。 2. 查询男生的资料。 3. 查询所有计算机系的班级信息。 4.查询艾老师所教的课程号。 5. 查询年龄小于30岁的女同学的学号和姓名。…...
Docker 从入门到精通(大全)
一、概述 1.1 基本概念 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。…...
基于JSP的在线教育资源管理系统
开头语: 你好呀,我是计算机学长猫哥!如果你对在线教育资源管理系统感兴趣或者有相关需求,欢迎在文末找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:IDE、N…...
在java中代理http请求,如何避免陷入循环?
在 Java 中,代理 HTTP 请求时,如果不小心配置不当,可能会导致循环请求。循环请求通常发生在代理服务器将请求再次发送回自己,形成一个死循环。为了避免这种情况,可以采取以下几种方法: 将域名设置为指定的…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
