当前位置: 首页 > news >正文

绘制图形

自学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&#xff1a; 作用&#xff1a;创建用户 ​语法&#xff1a;useradd [选项名] 用户名 ​选项&#xff1a; -d<登入目录> 指定用户登入时的起始目录。 【掌握】 -g<群组> 指定用户所属的群组&#xff08;基本组&#xff09;。【掌握】…...

【SQL Server数据库】简单查询

目录 用SQL语句完成下列查询。使用数据库为SCHOOL数据库 1. 查询学生的姓名、性别、班级名称&#xff0c;并把结果存储在一张新表中。 2. 查询男生的资料。 3. 查询所有计算机系的班级信息。 4&#xff0e;查询艾老师所教的课程号。 5. 查询年龄小于30岁的女同学的学号和姓名。…...

Docker 从入门到精通(大全)

一、概述 1.1 基本概念 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。…...

基于JSP的在线教育资源管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对在线教育资源管理系统感兴趣或者有相关需求&#xff0c;欢迎在文末找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDE、N…...

在java中代理http请求,如何避免陷入循环?

在 Java 中&#xff0c;代理 HTTP 请求时&#xff0c;如果不小心配置不当&#xff0c;可能会导致循环请求。循环请求通常发生在代理服务器将请求再次发送回自己&#xff0c;形成一个死循环。为了避免这种情况&#xff0c;可以采取以下几种方法&#xff1a; 将域名设置为指定的…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...