绘制图形

自学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所示的绿色实心正八边形。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/744213.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FineReport聚合报表与操作

一、报表类型 模板设计是 FineReport 学习过程中的主要难题所在,FineReport 模板设计主要包括普通报表、聚合报表、决策报表三种设计类型。 报表类型简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 二、聚合报表 2-1 介绍 聚合报表指一个报表中包含多个…

STM32的SPI通信

1 SPI协议简介 SPI(Serial Peripheral Interface)协议是由摩托罗拉公司提出的通信协议,即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间,使用于对通信速率要求较高的场合。 …

扩散模型 GLIDE:35 亿参数的情况下优于 120 亿参数的 DALL-E 模型

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

LeetCode 算法:二叉树的层序遍历 c++

原题链接🔗:二叉树的层序遍历 难度:中等⭐️⭐️ 题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:roo…

TensorFlow开源项目

欢迎来到 Papicatch的博客 文章目录 🍉TensorFlow介绍 🍉主要特点和功能 🍈多语言支持 🍈灵活的架构 🍈分布式训练 🍈跨平台部署 🍈强大的工具链 🍈丰富的社区和生态系统 &a…

人工智能与物联网:融合创新驱动未来

引言 人工智能(AI)指的是计算机系统模拟人类智能的能力,包括学习、推理、问题解决、理解自然语言以及感知和响应环境的能力。AI技术涵盖了机器学习、深度学习、神经网络、自然语言处理等领域,广泛应用于图像识别、语音识别、自动驾…

FPGA学习笔记(5)——硬件调试与使用内置的集成逻辑分析仪(ILA)IP核

如果要对信号进行分析,可以使用外置的逻辑分析仪,但成本较高,对初学者来说没有必要,可以使用Xilinx Vivado内自带的逻辑分析仪IP核对信号进行分析,不过需要占用一定的芯片资源。 本节采用上一节配置的LED灯闪烁代码&a…

如何改善老年人的行走姿势以减少小碎步现象?

改善老年人行走姿势的方法 为了改善老年人的行走姿势并减少小碎步现象,可以采取以下几种方法: 平衡训练:通过使用单脚站立架、平衡板等器械,提高身体稳定性和协调性,增强核心稳定性及下肢肌肉力量,从而改善…

数据结构-顺序表的交换排序

顺序表的初始化 const int M 505;typedef struct{int key; //关键元素int others; //其他元素 }info;typedef struct{info r[M1]; int length(); //表长 }SeqList,*PSeqList; 冒泡排序 分析: 顺序表的冒泡排序和数组的冒泡排序的…

STM32定时器入门篇——(基本定时器的使用)

一、基本定时器的功能介绍: STM32F103的基本定时器有:TIM6、TIM7。基本定时器TIM6和TIM7各包含一个16位递增自动装载计数器,最大计数到2^16也就是65536,计数值为0~65535,其拥有的功能有:定时中断、主模式触…

深度学习21-30

1.池化层作用(筛选、过滤、压缩) h和w变为原来的1/2,64是特征图个数保持不变。 每个位置把最大的数字取出来 用滑动窗口把最大的数值拿出来,把44变成22 2.卷积神经网络 (1)conv:卷积进行特征…

Elasticsearch 数据提取 - 最适合这项工作的工具是什么?

作者:来自 Elastic Josh Asres 了解在 Elasticsearch 中为你的搜索用例提取数据的所有不同方式。 对于搜索用例,高效采集和处理来自各种来源的数据的能力至关重要。无论你处理的是 SQL 数据库、CRM 还是任何自定义数据源,选择正确的数据采集…

【Excel】单元格如何设置可选项、固定表头

设置可选项 固定表头:视图---冻结窗口

SD-WAN带宽对使用的影响及如何规划

SD-WAN(软件定义广域网)是一种创新技术,旨在优化和提升企业网络的性能、可靠性和安全性。带宽在SD-WAN的使用中起着关键作用,而确定SD-WAN专线所需的带宽大小需要综合考虑多个因素。本文将深入探讨SD-WAN带宽对使用的影响以及如何…

试析C#编程语言的特点及功能

行步骤,而不必创建新方法。其声明方法是在实例化委托基础上,加一对花括号以代表执行范围,再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…

go语言day4 引入第三方依赖 整型和字符串转换 进制间转换 指针类型 浮点数类型 字符串类型

Golang依赖下载安装失败解决方法_安装go依赖超时怎么解决-CSDN博客 go安装依赖包(go get, go module)_go 安装依赖-CSDN博客 目录 go语言项目中如何使用第三方依赖:(前两步可以忽略) 一、安装git,安装程序…

提升工作效率的实体和虚拟工具推荐

在现代工作中,我们常常需要利用各种工具来提高工作效率。本文将介绍一款实体工具和一款虚拟工具,它们都能够有效地提升工作效率,让我们更高效地完成任务。 实体工具:金鸣表格文字识别大师 金鸣表格文字识别大师是一款优秀的文字识…

使用 Spring Boot 3.x 与图形学技术,添加电子印章防伪特征

使用 Spring Boot 3.x 与图形学技术,添加电子印章防伪特征 在电子办公和无纸化办公日益普及的今天,电子印章的使用越来越广泛。然而,如何确保电子印章的安全性和防伪能力成为了一个亟待解决的问题。本文将通过 Spring Boot 3.x 和图形学技术,深入探讨如何为电子印章添加防…

Linux CentOS 环境 MySQL 主从复制集群搭建

环境说明 MySQL版本8.4.0 操作系统 Linux CentOS 7.9 官网文档 https://dev.mysql.com/doc/refman/8.4/en/replication-configuration.html 以下代码片段中带分号都是在MySQL命令行( mysql -uroot -p)中执行 1. 首先在两个节点上安装数据库 参考 Linux CentOS安装MySQL8.0 …

UnityShader SDF有向距离场简单实现

UnityShader SDF有向距离场简单实现 前言项目场景布置连连看画一个圆复制一个圆计算修改shader参数 鸣谢 前言 突然看到B站的一个教程,还不错,记录一下 项目 场景布置 使用ASE连连看,所以先要导入Amplify Shader Editor 连连看 画一个…