当前位置: 首页 > 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; 将域名设置为指定的…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

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

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

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...