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

python海龟绘图

一、基础

(一)介绍

海龟绘图(Turtle Graphics):“小海龟”turtle是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

  • 海龟绘图(turtle库)是python的内部模块,使用前导入即可 import turtle
  • 海龟有3个关键属性:方向、位置和画笔(笔的属性有色彩、宽度和开关状态)

1.基本元素

画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置。

  • (1)画布(canvas)
turtle.screensize(canvwidth=None,canvheight=None,bg=None)

参数分别代表画布的宽、高(单位像素)和背景颜色:

turtle.screensize(800,600,"green")
turtle.screensize() #默认返回(400,300,"white")

另一种设置画布大小的方式:

turtle.setup(width=0.5,height=0.75,startx=None,starty=None)
turtle.setup(width=800,height=0.8)
turtle.setup(width=800,height=600,startx=100,starty=200)

当长和宽是小数时,代表占据整个屏幕的比例;为整数时,代表像素大小。(startx,starty)代表窗口左上角的位置,如果为空,整个窗口位于屏幕中心。

  • (2) 画笔(Pen)
    使用 turtle.Pen() 来创建画笔对象
import turtle
turtle.Pen()
turtle.mainloop()#画面保持

代码执行后就建立了画布,同时屏幕中间可以看见箭头(arrow),即所谓的海龟。
在海龟绘图中,海龟的起点即画布中央为 (0,0),移动单位是像素 (pixel),描述海龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中, 就是使用位置方向描述海龟(画笔)的状态
在这里插入图片描述

  • (3)绘图命令
    绘图命令主要分为三种:
    画笔运动命令
    画笔控制命令
    全局控制命令

画笔运动命令
在这里插入图片描述
画笔控制命令
在这里插入图片描述
全局控制命令
在这里插入图片描述

turtle.circle(radius,extent=None,steps=None)#radius=半径,正负有别,extent代表弧度,steps内切正多边形的边数
turtle.setheading(angle)#转变方向,angle指绝对角度,只改变方向不行进
turtle.done() #停止画笔绘制,但是不关闭窗口 

二、实例

1.正方形

import turtleturtle.setup(800, 400) #调整画板大小
turtle.up() #提起笔
turtle.goto(-50, 50) #调整画板起始点
turtle.down() #放下笔
turtle.color("red") #画笔颜色
turtle.speed(1) #控制绘画速度# 画图过程
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
# 保持画面
turtle.mainloop()

在这里插入图片描述

2.递归绘制树

from turtle import *
# 相比于 import turtle as * 这样的区别# 绘制过程使用递归算法,后续解释
def tree(branchLen, t):if branchLen > 5:t.forward(branchLen)t.right(20)tree(branchLen - 15, t)t.left(40)tree(branchLen - 10, t)t.right(20)t.backward(branchLen)t = Turtle()
myWin = t.getscreen() # 获取屏幕
t.speed(0)
t.hideturtle() # 隐藏箭头
t.left(90) # 掉转绘制方向朝上
t.up() # 画笔离开
t.backward(300) # 将画笔移动到屏幕下方
t.down() # 画笔落下
t.color("green") #调整画笔颜色
tree(110, t) #调用绘制函数
myWin.exitonclick() # 点击关闭屏幕

在这里插入图片描述

3.旋转多边形

import turtle as ta = 200
t.speed(0)
t.color("green")
for x in range(1, 37):t.forward(a)t.left(90)t.forward(a)t.left(90)t.forward(a)t.left(90)t.forward(a)t.left(100)
t.mainloop()

在这里插入图片描述

4.彩色多边形

import turtlet = turtle.Pen()
t.pensize(5)
colorValue = 1
colorStep = colorValue / 36
t.speed(0)
for x in range(1, 37):colorValue -= colorStept.color(0.5, 1, colorValue)t.forward(200)t.left(90)t.forward(200)t.left(90)t.forward(200)t.left(90)t.forward(200)t.left(100)
turtle.mainloop()

在这里插入图片描述

5.五角星

import turtlet=turtle.Pen()
t.hideturtle()
t.pensize(5) #画笔粗细
t.color("yellow","yellow")
t.begin_fill()
t.up()
t.goto(-100,50)#画笔移动到画布较为中心的位置
t.down()
for i in range(1,6):t.forward(200)t.right(144)
t.end_fill()
turtle.done() #类似Mainloop,一个循环函数,保证画布持续存在

在这里插入图片描述

6.迭代五角星

from turtle import *pen()
pencolor("red")
speed(0)for i in range(20):forward(i*20)right(144)done()

在这里插入图片描述

7.彩色五角星

from turtle import *pensize(5)
color("yellow", "red")
begin_fill() # 准备填充
for i in range(5):forward(200)right(144)end_fill() # 填充完毕up()
goto(-200, -100)  # 将海龟移动到此位置
pencolor("violet")  # 颜色选用紫罗兰
write("WY", False, "left", font=('Arial', 40, 'normal'))  # 在当前位置输入字符“wy”,光标回到左下角,font中三项分别指定字型、字号和形式
done()

在这里插入图片描述

import turtleturtle.pensize(5)
turtle.pencolor("yellow")
turtle.fillcolor("red")turtle.begin_fill()
for i in range(5):turtle.forward(100)turtle.right(144)turtle.forward(100)turtle.left(72)
turtle.end_fill()turtle.hideturtle()
turtle.done()

在这里插入图片描述

8.同心圆

代码1

import turtle as t
for i in range(10,100,10):t.circle(i)t.penup()t.right(90)t.fd(10)t.left(90)t.pendown()
t.done()    

代码2

import turtle as t
for i in range(10,100,10):t.circle(i)t.penup()t.goto(0,-i)t.pendown()
t.done()

运行截图:
在这里插入图片描述

9.奥运五环

代码

import turtle
r=45  
xy_list=[(-110,-25),(0,-25),(110,-25),(-55,-75),(55,-75)]
color_list=['red','yellow','green','blue','black']
turtle.pensize(5)
for i in range(5):turtle.penup()turtle.goto(xy_list[i])turtle.pendown()turtle.pencolor(color_list[i])turtle.circle(r)
turtle.hideturtle()
turtle.done()

运行截图:
在这里插入图片描述

10.绘制风轮

代码

import turtle as t
t.pensize(2)
for i in range(4):t.seth(90*i)t.fd(150)t.right(90)t.circle(-150,45)t.goto(0,0)
t.done()

运行截图:

在这里插入图片描述

11.太阳花

代码1

import turtle as t
t.color("red","yellow")
t.begin_fill()
for _ in range(50):t.forward(200)t.left(170)t.end_fill()
t.mainloop()

运行截图1:
在这里插入图片描述
代码2

import turtle as t
import timet.color("red", "yellow")
t.speed(10)
t.begin_fill()
for _ in range(25):t.forward(200)t.left(165)t.end_fill()
time.sleep(5)

运行截图2:
在这里插入图片描述

12.四叶草

import turtleturtle.title('四叶草') #画布标题
# turtle.bgcolor("green") #背景颜色
turtle.pensize(5) #画笔宽度
turtle.speed(2) #海龟移动速度
turtle.fillcolor("green") #填充的颜色
turtle.begin_fill() #开始填色# 花瓣
for i in range(4):turtle.circle(80, 50)turtle.circle(20, 180)turtle.left(180)turtle.circle(20, 180)turtle.circle(80, 50)turtle.left(180)
turtle.end_fill() #结束填色# 花心
turtle.penup()
turtle.goto(-15, 0)
turtle.pendown()
turtle.circle(1)# 花枝
turtle.penup()
turtle.goto(-10, -10)
turtle.pendown()
turtle.right(90)
turtle.circle(-200, 80)# 打印
turtle.penup()
turtle.goto(0, 100) #移动位置,改变write的位置
turtle.write(' Good Luck !', font = ('arial', 18, 'normal')) #打印内容
turtle.done() #手动关闭

在这里插入图片描述

13.蛇

from turtle import *setup(900, 350, 200, 200)
up()
fd(-350)
down()
pensize(25)
color("purple")# 控制画笔起始方向
seth(-40)
# 绘制蛇身
for i in range(4):circle(60, 80)circle(-60, 80)
circle(60, 80 / 2)
# 绘制蛇头
fd(60)
circle(32, 180)
fd(60 * 2 / 3)done()

在这里插入图片描述

相关文章:

python海龟绘图

一、基础 (一)介绍 海龟绘图(Turtle Graphics):“小海龟”turtle是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始…...

【计算机网络】数据链路层

概述 封装成帧 差错检验 可靠传输 实现机制 可靠传输的实现机制 停止等待协议 回退N帧协议 选择重传协议 【计算机网络】MAC帧和PPP帧(定义使用范围区别共同点)_GPNU_Log的博客-CSDN博客_ppp帧 PPP帧和以太网帧 | Mixoo 数据链路层的协议有PPP协…...

使用groovy代码方式解开gradle配置文件神秘面纱

来到这里的是不是都有以下疑问: 1.build.gradle配置文件结构好复杂啊,怎么记? 2.内部是怎么进行分析和执行的? 3.为什么可以在配置文件里面写groovy代码,怎么识别的? 4.怎么才能很方便的记住和快速上手…...

kafka入门到实战二(使用docker搭建kafka集群)

使用Docker搭建kafka单机/集群 拉取镜像:2.8.0之前,kafka都需要依赖zookeeper docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper运行zookeeper镜像 docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper运行ka…...

【简化开发】lombok的使用、编译后的代码及源码

lombok的使用导入依赖一、getter、Setter、toString1、getter、Setter分别生成getxxx()和setxxx()方法2、toString生成toString()方法,按顺序打印类名称以及每个字段,并以逗号分隔二、NoArgsConstructor、RequiredArgsConstructor、AllArgsConstructor1、…...

在线就能用的主图设计素材,免费分享!

如何给自己的店铺商品设计专属的节日活动主图?没有节日活动的主体素材要如何设计?下面小编就分享一个在线素材设计工具,打开乔拓云,平台里面不仅有许多能使用的电商设计素材,还有许多的设计工具和模板能帮助你快速的实…...

【测绘程序设计】——计算卫星位置

本文分享了根据广播星历计算卫星于瞬时地固系下位置的计算程序(C#版)(注:瞬时地球坐标系坐标经极移改正即可获得协议地球坐标系坐标),相关源代码(完整工程,直接运行;包含实验数据)及使用示例如下。 目录 Part.Ⅰ 使用示例Part.Ⅱ 代码分析Chap.Ⅰ 数据结构Chap.Ⅱ 计…...

山东双软认证的基本条件

​一、山东双软认证的基本条件 "双软认证"是指软件产品评估和软件企业评估;企业申请双软认证除了获得软件企业和软件产品的认证资质,同时也是对企业知识产权的一种保护方式,更可以让企业享受国家提供给软件行业的税收优惠政策;我们…...

TPM 2.0实例探索3 —— LUKS磁盘加密(4)

接前文:TPM 2.0实例探索2 —— LUKS磁盘加密(3) 本文大部分内容参考: Code Sample: Protecting secret data and keys using Intel Platform... 二、LUKS磁盘加密实例 4. 将密码存储于TPM的PCR TPM平台配置寄存器(…...

Linux连接RDP远程服务工具集记录

目录 rdesktop 安装 实例 xfreerdp 安装 实例 remmia 介绍 rdesktop 安装...

离散事件动态系统

文章目录离散事件动态系统ppt离散事件系统建模离散事件动态系统的基本组成元素离散事件动态系统仿真具体建模petri建模实例离散事件动态系统 ppt ppt 仿真建模步骤 离散事件系统建模 from:离散事件系统建模 离散事件动态系统的基本组成元素 (1&am…...

无线WiFi安全渗透与攻防(二)之打造专属字典

系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 打造专属字典 什么在破解之前先准备专用字典,因为对于一般家庭来说,常用 一个是预共享密钥PSK,一个是PIN码。 也不是所有的路由都开起了PIN码,一般都会开启域共享密钥…...

拥抱 Spring 全新 OAuth 解决方案

以下全文 Spring Authorization Server 简称为: SAS 背景 Spring 团队正式宣布 Spring Security OAuth 停止维护,该项目将不会再进行任何的迭代目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用 作为 SpringBoot 3.0 的…...

前端开发与vscode开发工具介绍

文章目录1、前端开发2、vscode安装和使用2.1、下载地址2.2、插件安装2.3、设置字体大小2.4、开启完整的Emmet语法支持2.5、创建项目2.6、保存工作区2.7、新建文件夹和网页1、前端开发 前端工程师“Front-End-Developer”源自于美国。大约从2005年开始正式的前端工程师角色被行…...

C++---最长上升子序列模型---友好城市(每日一道算法2023.3.2)

注意事项: 本题为"线性dp—最长上升子序列的长度"的扩展题,所以dp思路这里就不再赘述。 题目: Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。 北岸的每个城市有且仅有…...

maven高级知识。

目录 一、分模块开发 1、分模块开发设计 2、依赖管理 二、继承和聚合 1、聚合 2、继承 三、属性 1、基本介绍 2、版本管理 四、多环境配置与应用 1、多环境开发 2、跳过测试 五、私服 1、私服安装 2、私服仓库分类 一、分模块开发 1、分模块开发设计 ▶ 示意图 …...

Python 之 Pandas 处理字符串和apply() 函数、applymap() 函数、map() 函数详解

文章目录一、处理字符串1. 向量化字符串操作简介2. str 方法的简介二、apply() 函数详解三、applymap() 函数详解四、map() 函数详解一、处理字符串 当我们遇到一个超级大的 DataFrame,里面有一列类型为字符串,要将每一行的字符串都用同一方式进行处理&…...

汇川AM402和上位机C#ModebusTcp通讯

目录 一、测试任务 二、测试环境 三、PLC工程 1、组态配置 2、ip地址、端口号 3、全局变量定义 四、C#端Winform程序创建 1创建主界面 2、创建子窗口 3、运行生成,界面效果 4、Modebus协议说明 5、Modebus操作说明 六、测试 1、寄存器读测试 2、MW1300寄…...

给你一个电商网站,你如何测试?功能测试及接口测试思路是什么?

功能测试思路 1、注册测试: 测试注册表单是否可以正确提交用户信息; 测试注册表单是否有输入限制,例如密码长度、邮箱格式等; 测试注册后是否可以正常登录。 2、登录测试: 测试登录表单是否可以正确提交用户信息&…...

Spring Boot 3.0系列【5】基础篇之应用配置文件

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言应用配置文件文件格式YAML获取配置属性方式1:@Value方式2: @ConfigurationProperties方式3: @PropertySource方式4…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...