python 海龟画图tutle螺旋线

news2024/12/24 21:53:03

目录

初识turtle模块

基本绘图概念

示例:绘制一个正方形

示例:绘制彩色螺旋线

附录

常用命令

其它命令


在Python编程中,使用turtle模块进行图形绘制是一种非常有趣和富有教育意义的活动。通过控制一个小海龟(Turtle)在屏幕上移动,我们可以创造出各种美丽的图案和图形。在这篇文章中,我们将探讨如何使用turtle模块来绘制图形,并展示一些有趣的例子。

初识turtle模块

turtle模块是Python标准库的一部分,它提供了一个简单的绘图环境。在这个环境中,我们可以控制一个小海龟在屏幕上移动,它会在移动过程中绘制线条。通过改变海龟的移动方向、速度和颜色,我们可以创造出各种各样的图案。

基本绘图概念

在使用turtle进行绘图之前,我们需要了解一些基本的概念:

  • 画布(Screen):这是海龟绘制图形的区域。我们可以通过设置背景颜色来改变画布的背景。
  • 海龟(Turtle):海龟是绘图的工具,我们可以控制它的移动和绘制。
  • 笔(Pen):海龟用来绘制线条的工具。我们可以设置笔的颜色、大小和是否抬起(不绘制线条)。
  • 移动命令:包括前进(forward)、后退(backward)、左转(left)和右转(right)等。

示例:绘制一个正方形

让我们从一个简单的例子开始,绘制一个正方形:

import turtle

# 创建画布和海龟
window = turtle.Screen()
window.bgcolor("white")
t = turtle.Turtle()

# 绘制正方形
for _ in range(4):
    t.forward(100)  # 向前移动100个单位
    t.left(90)     # 左转90度

# 隐藏海龟并完成绘图
t.hideturtle()
window.mainloop()

在这个例子中,我们创建了一个画布和一个海龟对象。然后,我们使用一个for循环来重复绘制四条边,每条边长100个单位,并在绘制每条边后左转90度。

示例:绘制彩色螺旋线

接下来,我们将绘制一个彩色的螺旋线:

import turtle

# 创建画布和海龟
window = turtle.Screen()
window.bgcolor("white")
t = turtle.Turtle()

# 设置笔的速度
t.speed(0)

# 绘制彩色螺旋线
colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']
for i in range(360):
    t.color(colors[i % 6])  # 切换颜色
    t.forward(i)         # 向前移动
    t.left(59)          # 左转59度

# 隐藏海龟并完成绘图
t.hideturtle()
window.mainloop()

在这个例子中,我们创建了一个彩色的螺旋线。我们定义了一个颜色列表,并在每次循环中切换颜色。我们还改变了海龟的移动距离和旋转角度,以创造出螺旋的效果。

旋转改为60度: 

旋转改为61度: 

尝试其它角度:

import turtle
from colorlib import *

w = turtle.Screen()
w.setup(width=500, height=500) 
t = turtle.Turtle()
t.speed(0)

angle = 5,10,15,29,30,31,45,59,60,61,89,90,91,120,121,239,240,272
for a in angle:
    t.penup()
    t.goto(50-w.window_width()/2, w.window_height()/2-50)
    t.color("black")
    t.write(a, font=("Arial", 20, "normal"))
    t.home()
    t.pendown()
    for i in range(360):
        t.color(tuple2str(randcolorTuple()))
        t.forward(i)
        t.left(a)
        if abs(t.xcor()) > w.window_width()/2 or abs(t.ycor()) > w.window_height()/2:
            break
    t.clear()

w.mainloop()

同时导入colorlib自定义库,详见:python 教你如何创建一个自定义库 colorlib.py-CSDN博客

变换不同的旋转角度,形成各种不同图形,运行效果如下: 

 

附录

常用命令

  1. turtle.forward(distance): 让海龟向前移动指定的距离。

    turtle.forward(100) # 海龟向前移动100个单位

  2. turtle.backward(distance): 让海龟向后移动指定的距离。

    turtle.backward(50) # 海龟向后移动50个单位

  3. turtle.right(angle): 让海龟向右转指定的角度。

    turtle.right(90) # 海龟向右转90度

  4. turtle.left(angle): 让海龟向左转指定的角度。

    turtle.left(45) # 海龟向左转45度

  5. turtle.penup(): 提起笔,移动时不会绘制线条。

    turtle.penup() # 提起笔 turtle.goto(0, 0) # 海龟移动到原点,不会绘制线条

  6. turtle.pendown(): 放下笔,开始绘制线条。

    turtle.pendown() # 放下笔

  7. turtle.goto(x, y): 移动海龟到指定的坐标位置。

    turtle.goto(-50, 100) # 海龟移动到坐标(-50, 100)

  8. turtle.setpos(x, y): 与goto类似,但不会绘制从当前位置到新位置的直线。

    turtle.setpos(0, 0) # 海龟移动到原点,不会绘制线条

  9. turtle.setheading(angle): 设置海龟的朝向为指定的角度。

    turtle.setheading(0) # 海龟朝向正x轴方向

  10. turtle.circle(radius): 让海龟绘制一个圆。

    turtle.circle(50) # 海龟绘制一个半径为50的圆

  11. turtle.dot(size): 绘制一个点。

    turtle.dot(5) # 绘制一个半径为5的点

  12. turtle.color(color): 设置笔的颜色。

    turtle.color("red") # 设置笔的颜色为红色

  13. turtle.fillcolor(color): 设置填充颜色。

    turtle.fillcolor("blue") # 设置填充颜色为蓝色

  14. turtle.begin_fill(): 开始填充图形。

    turtle.begin_fill() # 开始填充

  15. turtle.end_fill(): 结束填充图形。

    turtle.end_fill() # 结束填充

  16. turtle.write(text[, align][, font][, move][, clear]): 让海龟移动到指定位置并写入文本。

    turtle.write("Hello, Turtle!", align="center", font=("Arial", 24)) # 在海龟当前位置居中写入文本

  17. turtle.speed(speed): 设置海龟的移动速度。

    turtle.speed(10) # 设置海龟的速度为10

  18. turtle.hideturtle(): 隐藏海龟图标。

    turtle.hideturtle() # 隐藏海龟

  19. turtle.showturtle(): 显示海龟图标。

    turtle.showturtle() # 显示海龟

  20. turtle.clear(): 清除海龟的图形和文字。

    turtle.clear() # 清除所有绘制的内容

  21. turtle.reset(): 重置海龟的状态和位置。

    turtle.reset() # 重置海龟

其它命令

  1. turtle.pensize(width): 设置笔的宽度。

    turtle.pensize(5) # 设置笔的宽度为5个单位

  2. turtle.pen: 一个包含笔属性的方法和属性的类,可以用来设置笔的颜色、宽度、是否可见等。

    turtle.pen() # 返回当前笔的状态 turtle.pencolor("green") # 设置笔的颜色为绿色 turtle.penwidth(10) # 设置笔的宽度为10个单位 turtle.speed(1) # 设置绘制速度

  3. turtle.fill: 一个布尔值属性,用于控制图形填充。

    turtle.fill(True) # 开启填充

  4. turtle.getscreen(): 返回当前海龟所在的画布对象。

    screen = turtle.getscreen() # 获取当前画布

  5. turtle.getpen(): 返回当前笔的状态。

    pen = turtle.getpen() # 获取当前笔的状态

  6. turtle.getturtle(): 返回当前海龟的状态。

    turtle_state = turtle.getturtle() # 获取当前海龟的状态

  7. turtle.getpos(): 返回海龟的当前位置。

    position = turtle.getpos() # 获取海龟的当前位置

  8. turtle.getheading(): 返回海龟的当前朝向角度。

    heading = turtle.getheading() # 获取海龟的当前朝向

  9. turtle.getx()turtle.gety(): 分别返回海龟当前位置的x和y坐标。

    x = turtle.getx() # 获取海龟的x坐标 y = turtle.gety() # 获取海龟的y坐标

  10. turtle.isdown(): 返回笔是否被放下的状态。

    is_down = turtle.isdown() # 检查笔是否被放下

  11. turtle.speed(): 返回或设置海龟的移动速度。

    turtle.speed(2) # 设置海龟的速度为2 current_speed = turtle.speed() # 获取当前速度

  12. turtle.colormode(mode): 设置颜色模式。默认模式是1.0,其中颜色值介于0到255之间。如果设置为255,颜色值介于0到1之间。

    turtle.colormode(255) # 将颜色模式设置为0-1范围

  13. turtle.register_shape(shapename, shapedata): 注册一个新的图形形状。

    turtle.register_shape("myshape", shapedata) # 注册一个名为"myshape"的新形状

  14. turtle.getshapes(): 返回当前可用形状的列表。

    shapes = turtle.getshapes() # 获取当前可用的形状列表

  15. turtle.shape(shapename): 设置海龟的当前形状。

    turtle.shape("turtle") # 设置海龟的形状为"turtle"

  16. turtle.shapesize(stretch_wid, stretch_len, out=0.0): 设置海龟形状的拉伸宽度和长度。

    turtle.shapesize(1.5, 0.5) # 设置形状的宽度拉伸为1.5倍,长度拉伸为0.5倍

  17. turtle.undo(): 撤销上一次的绘制操作。

    turtle.undo() # 撤销上一次的操作

  18. turtle.clearscreen(): 清除整个屏幕并重置海龟到初始状态。

    turtle.clearscreen() # 清除屏幕并重置海龟

  19. turtle.screensize(width, height): 设置画布的大小。

    turtle.screensize(800, 600) # 设置画布的宽度为800,高度为600

  20. turtle.tracer(n): 控制屏幕更新的频率。n是更新的延迟,单位是1/60秒。

    turtle.tracer(10) # 设置屏幕更新的延迟为1/10秒


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

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

相关文章

2010-2022年各省新质生产力测算数据(含原始数据+计算代码+计算结果)

2010-2022年各省新质生产力测算数据(含原始数据计算代码计算结果) 1、时间:2010-2022年 2、来源:国家统计局、各省年鉴、能源年鉴、环境年鉴 3、范围:31省 4、指标: 省份、年份、分地区授权专利数&…

Java中类加载的机制

Java中类加载的机制 从宏观上看: 加载->链接->初始化 整个生命周期流程: 加载->验证->准备->解析->初始化->使用->卸载 1、加载 查找并加载类的二进制数据,并生成Class对象的实例的过程 也就是将类的.class文件…

excel里如何的科学计数法的数字转换成数值?

比如下图,要想把它们转换成3250跟1780,有什么快捷的办法吗? 科学计数法在excel里的格式,与我们常规在数学上写的有差异。这个转换可以这样做: 1.转换后的效果: 2.问题分析 题目中所附截图,单元…

Docker镜像,什么是Docker镜像,Docker基本常用命令【搜索,镜像下载,镜像删除,创建容器,导入到处镜像】及其镜像的分层

docker镜像 1.1什么是镜像,镜像基础 1.1.1 镜像的简介 镜像是一种轻量级,可执行的独立软件包,也可以说是一个精简的操作系统。镜像中包含应用软件及应用软件的运行环境,具体来说镜像包含运行某个软件所需的所有内容,…

ThingsBoard自定义需求生成告警规则以及清除告警规则

上一章已对基础的生成告警规则进行了介绍,如想查看基础,请查看下面的文章 ThingsBoard实现告警规则创建并生成报警信息-CSDN博客文章浏览阅读991次,点赞9次,收藏25次。发起者警报发起者是警报的实体例如:如果收到来自…

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

ArcGIS多数据框联动批量出图

这次内容是《ArcPy结合数据驱动模块的批量制图》课程的新增内容。学完这个课程大家对arcgis的数据驱动页面的批量出图应该是驾轻就熟,不管是无编程的完全基于ArcGIS数据驱动模块批量出图还是结合ArcPy的Mapping模块批量出图(arcpy.mapping)。…

MercadoLibre(美客多)入仓预约系统操作流程-自动化约号(开篇)

目录 一、添加货件信息 二、输入货件信息 三、选择发货 四、填写交货日期 五、注意事项 MercadoLibre(美客多)于2021年10月18号上线了新预约入仓系统,在MercadoLibre美客多平台上,新入仓预约系统是一项非常重要的功能&#x…

【技巧】win11 删除网络中心中多余的以太网信息

因为网络环境的变化,系统在识别网络时会出现“以太网1”,“以太网2”,“以太网3”的情况。虽然不影响使用,但是对于一些强迫症来说很不友好,通过以下方式删除: 1、Win R 打开,运行,…

「 安全工具介绍 」软件成分分析工具Black Duck,业界排名TOP 1的SCA工具

在现代的 DevOps 或 DevSecOps 环境中,SCA 激发了“左移”范式的采用。提早进行持续的 SCA 测试,使开发人员和安全团队能够在不影响安全性和质量的情况下提高生产力。前期在博文《「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到…

open Gauss 数据库-05 openGauss数据库备份恢复指导手册

发文章是为了证明自己真的掌握了一个知识,同时给他人带来帮助,如有问题,欢迎指正,祝大家万事胜意! 目录 前言 openGauss数据库备份恢复 1 实验介绍 1.1 关于本实验 1.2 实验目的 2 实验前提 3 物理备份和恢复…

Day3 权限管理

Day3 权限管理 这里会总结构建项目过程中遇到的问题,以及一些个人思考!! 学习方法: 1 github源码 文档 官网 2 内容复现 ,实际操作 项目源码同步更新到github 欢迎大家star~ 后期会更新并上传前端项目 创建管理员…

技术周刊的转变:如何平衡热爱与现实?

大家好,我是那个自己打脸自己的猫哥,本来说周刊不做订阅制的,现在却推出了订阅专栏。今天想为自己辩护一下,同时聊聊技术周刊今后的发展计划。 首先回顾一下我过去的想法吧,然后再解释为什么会突然出现转变。 出于对…

Stable Diffusion 3 API 发布!超越Midjourney v6和DALL-E 3

Stable Diffusion 3 于 2 月首次宣布作为预览版发布。而今天,StabilityAI 正式推出了 Stable Diffusion 3 和 Stable Diffusion 3 Turbo API 的API接口服务。 Stability AI 称仍在持续改进该模型,并没有说明发布日期。模型还没发布,但API先来…

Python | Leetcode Python题解之第28题找出字符串中的第一个匹配项的下标

题目: 题解: class Solution:def strStr(self, haystack: str, needle: str) -> int:# Func: 计算偏移表def calShiftMat(st):dic {}for i in range(len(st)-1,-1,-1):if not dic.get(st[i]):dic[st[i]] len(st)-idic["ot"] len(st)1re…

JS-39-underscore01-初识underscore

一、underscore简介 前面我们已经讲过了,JavaScript是函数式编程语言,支持高阶函数和闭包。 函数式编程非常强大,可以写出非常简洁的代码。例如Array的map()和filter()方法: use strict; var a1 [1, 4, 9, 16]; var a2 a1.ma…

数据结构书后习题

p17 1&#xff0c; 个人解答&#xff1a; int DeleteMinElem(SqList &L,int &min) {int j 0;if (L.length 0){printf("error!");return 0;}int min L.data[0];for (int i 1; i < L.length; i){if (L.data[i] < min){min L.data[i];j i;}}L.dat…

电工与电子技术选择题填空题计算题复习题含参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 电工与电子技术复习题 一 . 单选题&#xff08;共 33 题&a…

[渗透测试学习] TwoMillion-HackTheBox

TwoMillion-HackTheBox 信息搜集 nmap扫描一下 nmap -sV -v 10.10.11.221扫描结果 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 3851/tcp f…

SAP 技巧:如何查询TCODE的节点路径。

目录 SAP 技巧&#xff1a;如何查询TCODE的节点路径。 步骤一&#xff1a;在命令栏里输入&#xff1a;Search_SAP_Menu 会弹出以上页面&#xff0c;然后输入你想查询的T-code。回车。 步骤二&#xff1a;找到正确路径&#xff0c; SAP 技巧&#xff1a;如何查询TCODE的节点路…