绘制图形

news2024/10/6 16:24:09

自学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.coloradmin.cn/o/1862492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过frp实现内外网映射

frp介绍和使用方法可以参考官网:安装 | frp 1、准备两台服务器,一台内网服务器A,一台有公网ip的外网服务器B(47.12.13.15) 2、去官方仓库下载frp安装包:Releases fatedier/frp GitHub 下载包根据自己服务系统选择 ​ 3、先在外网服务器…

类的默认成员函数——拷贝构造函数

1.概念引入 在现实生活中,如果有两个兄弟长得一模一样,我们就称其为双胞胎 当我们创建了一个新的对象,需要用同类型的对象拷贝并初始化,就要用到拷贝构造函数 拷贝构造函数:只有单个形参,该形参是对本类类…

2024 年 8 款最佳建筑 3D 渲染软件

你现在使用的3D 渲染软件真得适合你吗? 在建筑和室内渲染当中,市面上有许多3D渲染软件可供选择。然而,并不是每款软件都适合你的需求。本指南将重点介绍2024年精选的8款最佳建筑3D渲染软件,帮助你了解不同的选项,并选…

STM32的SPI通信

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

基于Java的宠物领养管理系统【附源码】

摘 要 近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,宠物管理系统利用计算机网络实现信息化管理,使整个宠物领养的发展和服务水平有显著提升。 本文拟采用IDEA开发工具…

Live Wallpaper Themes 4K Pro for Mac v19.9 超高清4K动态壁纸

Live Wallpaper & Themes 4K Pro for Mac v19.7 是一款专为Mac用户设计的超高清4K动态壁纸应用程序。它凭借出色的视觉效果和丰富的个性化设置,为用户带来全新的桌面体验。 这款软件提供了大量精美的动态壁纸供用户选择,涵盖了各种风格和主题&#…

考个嵌入式中级证书吧,有大用!

随着物联网、人工智能的蓬勃发展,嵌入式行业迎来了前所未有的发展机遇:物联网的万物互联需求,为嵌入式系统开拓了广阔的应用场景;人工智能的融入促使嵌入式设备向更智能、更自主的方向进化。然而,行业的火爆&#xff0…

都2024年了,现在互联网行情怎样?

都2024年了,互联网行情是怎样的? 很直白的说,依旧是差得很,怎么说? 我刚在掘金上看到一个掘友写的文章,他是四月领了大礼包,据他的描述如下: 互联网行情依旧是差得很,很…

通过迭代器删除容器中的元素

通过之前的介绍我们知道通过迭代器来遍历单例集合的操作仍然需要借助于循环结构。而且我们知道在单例集合中调用iterator方法返回的Iterator对象中还有一个remove方法我们没有介绍,它的作用是删除容器中的元素。说道这里应该有人会发现一个很明显的问题,…

第28课 绘制原理图——绘制导线

概述 放置完元器件之后,接着就要用导线将元器件的管脚一个一个连起来了。 绘制导线的方法 点击快速工具条上的“线”命令,进入绘制导线的过程。 点击选择某个管脚或电源端口,作为导线的起始端。 再点击选择另一个管脚或电源端口&#xff0c…

MT6989(天玑9300)芯片性能参数_MTK联发科5G处理器

MT6989是联发科Dimensity旗舰系列的成员,旨在为旗舰5G智能手机供应商提供最先进的技术和性能。MT6989也是联发科目前最具创新和强大的5G智能手机芯片,具有领先的功耗效率,无与伦比的计算架构,有史以来最快和最稳定的5G调制解调器&…

动物常见图像的图像分类数据集

常见动物图像分类数据集 数据集: 链接:https://pan.baidu.com/s/1zZnCUZuNlX6MjuZImlDjTw?pwd03b9 提取码:03b9 数据集信息介绍: 文件夹 大象 中的图片数量: 1446 文件夹 松鼠 中的图片数量: 1862 文件夹 河马 中的图片数量:…

YOLOv8/v10项目使用教程

根据改好的YOLOv8.yaml改yolov10.yaml教程 打开ultralytics/cfg/models/v8路径,找到需要移植的yaml文件,从其中复制相关的模块。打开一个YOLOv10的yaml文件。 注释掉之前相应位置的模块,并粘贴上面复制的模块,完成。 其余使用步骤…

upload-labs第14关

upload-labs第14关 第十四关一、源代码分析代码审计 二、绕过分析a. 制作图片码首先需要一个照片,然后其次需要一个eval.php。 b.上传图片码上传成功 c.结合文件包含漏洞进行访问访问:http://192.168.1.110/upload-labs-master/include.php?filehttp://…

SNEC天合储能秀:全球首发多元场景一站式工商业储能融合解决方案

6月13日-15日,SNEC2024光伏与智慧能源展在上海隆重举行,来自全球95个国家和地区3000家国内外展商齐聚展会,5000行业专家共话产业发展。致力于成为全球光储智慧能源解决方案的领导者,天合光能(展位号:7.2H-E…

LiveMedia视频汇聚平台的设备管理功能

LiveMedia视频汇聚平台的设备管理功能是实现视频资源有效管理和控制的关键组成部分。以下是设备管理功能的详细介绍: 设备接入与管理: 设备添加与编辑:平台支持添加、编辑与删除设备,可编辑的信息包括设备接入的协议类型、服务节…

ICASSP论文结构研究

MLCA-AVSR 基于多层交叉注意融合的视听语音识别 ABSTRACT 目标任务现状、目前研究现状(研究大方向、研究的欠缺)、本文方法、方法效果(排名、分数) 有一个Index Terms INTRODUCTION 目标任务的简单发展历程与发展现状,目前任务的难点,指出为什么会…

代码随想录-Day39

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…

Gradle学习-2 Groovy

1、Groovy基础语法 1.1、基本数据类型 Groovy支持数据类型:byte, short, int, long, float, double, char (1)创建一个Android Studio项目 (2)在根目录新建一个 leon.gradle,输入以下内容 leon.gradle…

Netty学习(二)——黏包半包、协议设计解析、聊天室

一、粘包与半包 1.1 粘包和半包复现 1、粘包复现: Server代码: public class ProblemServer {public static void main(String[] args) throws InterruptedException {new ServerBootstrap()//若是指定接收缓冲区大小:就会出现黏包、半包…