Turtle海龟画图

news2025/2/26 22:11:24

介绍

简单的一个窗口绘图工具。

提供一个小海龟,可以看做一个机器人,能够听得懂有限的命令。

 

三种命令

运动命令

forward(d)  向前移动D长度

backward(d) 向后移动D长度

right(d)     向右转动多少度

left(d)      向左转动多少度

goto(x,y)    移动到坐标(x,y)位置

speed(d)    笔画绘制速度[0,10]

笔画控制命令

up()           笔画抬起,在移动的时候不会画图

down()         笔画落下,移动会画图

setheading(d)    改变海龟的朝向

pensize(d)       笔画的宽度

pencolor(“red”)  笔画的颜色

reset()       恢复所有设置 清空窗口 重置turtle状态

clear()   清空窗口 但不会重置turtle

circle(r, steps=e)  绘制一个圆形,r为半径,e可以不填

填充颜色

begin_fill()

filecolor(color)

end_fill()

其他命令

done()        程序继续执行

undo()        撤销上一步动作

hideturtle()    隐藏海龟

showturtle()   显示海龟

screensize(x, y) 调整海龟正在绘制的画布的大小

导入

只需要导入turtle即可

import turtle

绘图窗口的原点(0,0)在正中间,默认海龟的方向是右侧。

简单图形

圆形

简单,直接用系统函数,不用多管。

代码如下:

t = turtle.Turtle()
t.hideturtle()

t.circle(40)

等边三角形

三个角加起来180度,即可;只需要注意前进和后退笔画。

代码如下:

t = turtle.Turtle()
t.hideturtle()

t.right(60)
t.forward(50)
t.left(60)
t.backward(50)
t.left(60)
t.forward(50)

多边形

6个边的多边形

代码如下:

t = turtle.Turtle()
t.hideturtle()

for i in range(0, 6):
    t.right(60)
    t.forward(30)

复杂实例

五环

代码如下:

import turtle


if __name__ == '__main__':

    t = turtle.Turtle()

    t.speed(10)
    t.pensize(15)
    t.hideturtle()

    t.up()
    t.goto(-180, 100)
    t.down()
    t.color('blue')
    t.circle(80)

    t.up()
    t.goto(0, 100)
    t.down()
    t.color('#000')
    t.circle(80)

    t.up()
    t.goto(180, 100)
    t.down()
    t.color('red')
    t.circle(80)

    t.up()
    t.goto(-100, 10)
    t.down()
    t.color('yellow')
    t.circle(80)

    t.up()
    t.goto(90, 10)
    t.down()
    t.color('green')
    t.circle(80)

    turtle.done()

效果

 

企鹅

代码如下:

import turtle

def draw_ellipse(a, b):
    """
    画椭圆形
    @a:0.4
    @b:0.04
    """

    for i in range(120):
        if 0 <= i < 30 or 60 <= i < 90:
            a = a + b
            t.left(3)
            t.forward(a)
        else:
            a = a - b
            t.left(3)
            t.forward(a)


def draw_eye():
    """ 绘制眼睛 """

    # 左眼睛
    t.up()
    t.goto(-20, 210)
    t.down()
    t.color('#000')
    t.begin_fill()
    draw_ellipse(0.2, 0.025)
    t.end_fill()

    # 左眼睛-光
    t.up()
    t.goto(-20, 228)
    t.down()
    t.color('#fff')
    t.begin_fill()
    draw_ellipse(0.04, 0.005)
    t.end_fill()

    # 右眼睛
    t.up()
    t.goto(20, 210)
    t.down()
    t.color('#000')
    t.begin_fill()
    draw_ellipse(0.2, 0.025)
    t.end_fill()

    # 右眼睛-光
    t.up()
    t.goto(20, 228)
    t.down()
    t.color('#fff')
    t.begin_fill()
    draw_ellipse(0.04, 0.005)
    t.end_fill()


def draw_arm():
    """ 绘制两个手臂 """

    # 左手臂
    t.up()
    t.goto(-150, 40)
    t.down()
    t.color('#312F32', '#49444A')
    t.begin_fill()
    t.left(30)
    t.forward(170)
    t.right(90)
    t.backward(100)
    t.right(60)
    t.forward(200)
    t.end_fill()

    # 右手臂
    t.up()
    t.goto(160, 40)
    t.down()
    t.color('#312F32', '#49444A')
    t.begin_fill()
    t.right(-90)
    t.backward(170)
    t.left(100)
    t.forward(100)
    t.right(130)
    t.forward(180)
    t.end_fill()


def draw_mouth(x, y, length):
    """ 绘制嘴巴 """
    t.up()
    t.goto(x, y)
    t.down()
    t.color('#312F32', '#EB3E2D')

    t.begin_fill()
    t.left(30)
    t.forward(length)
    t.right(30)
    t.forward(length)
    t.right(30)
    t.forward(length)

    t.left(60)
    t.backward(length)
    t.right(30)
    t.backward(length)
    t.right(30)
    t.backward(length)
    t.end_fill()


def draw_foot():
    """ 绘制脚 """

    # 左脚
    t.left(30)
    t.up()
    t.goto(-40, 15)
    t.down()
    t.color('#312F32', '#FF4C2D')
    t.begin_fill()
    t.left(60)
    t.backward(60)
    t.right(60)
    t.forward(60)
    t.right(60)
    t.backward(60)
    t.end_fill()

    # 右脚
    t.left(60)
    t.up()
    t.goto(40, 15)
    t.down()
    t.color('#312F32', '#FF4C2D')
    t.begin_fill()
    t.left(60)
    t.backward(60)
    t.right(60)
    t.forward(60)
    t.right(60)
    t.backward(60)
    t.end_fill()


if __name__ == '__main__':
    t = turtle.Turtle()
    t.hideturtle()
    t.pensize(2)
    t.speed(500)

    # 手臂
    draw_arm()

    # 身体
    t.up()
    t.goto(0, 0)
    t.left(60)
    t.color('#312F32', '#49444A')
    t.begin_fill()
    draw_ellipse(2, 0.25)
    t.end_fill()

    # 白肚皮
    t.down()
    t.color('#312F32', '#fff')
    t.begin_fill()
    draw_ellipse(1.6, 0.20)
    t.end_fill()

    # 眼睛
    draw_eye()

    # 嘴巴
    draw_mouth(-28, 195, 20)

    # 绘制脚
    draw_foot()

    turtle.done()

效果

 

总结

海龟画图还真是研究了不少时间,画了好些图形,这两个算是完成的比较好的。五环比较简单,有现成函数画圆,只需要调整位置和笔画粗细及颜色就完成了;企鹅难度大点,用到好几种图形:椭圆、三角形、不规则图形,颜色也是好几种。还有位置角度,这些调整起来比较麻烦。

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

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

相关文章

我让AI帮忙生成算法,Auto-GPT对比ChatGPT、文心一言,结果出人意料...

&#x1f34f;&#x1f350;&#x1f34a;&#x1f351;&#x1f352;&#x1f353;&#x1fad0;&#x1f951;&#x1f34b;&#x1f349;&#x1f95d; 我让AI帮忙生成算法&#xff0c;Auto-GPT对比ChatGPT、文心一言&#xff0c;结果出人意料… 文章目录 &#x…

如何在 Python 中获取字典交集

本文将讨论在 Python 中对两个或多个字典执行交集的不同方法。 文章目录 Python字典在 Python 中使用字典推导来交叉两个字典使用按位 & 运算符在 Python 中对两个字典进行交集使用 Set intersection() 方法在 Python 中将两个字典相交在 Python 中用于交叉多个字典的方法总…

C-预处理

文章目录 预处理宏定义数值宏常量字符串宏常量使用宏充当注释去注释和宏替换谁先进行 用define宏定义表达式在if判断语句之后多条语句没有{}导致出错 定义不能带空格 #undef 条件编译#ifdef ifndef:判定的是宏是否被定义#if-#endif:宏定义是否为真宏定义进行多条件筛选#ifdef &…

听好程序员一句劝!零基础这样学Java才是正确的方式!

有一说一&#xff0c;Java还是现在很多新手入门学习的首选之一&#xff0c;新手学Java入门从哪里开始学&#xff1f;很多入门的小伙伴都会疑惑&#xff0c;今天好程序员给大家分享一下&#xff0c;超适合菜鸟入门的 Java学习路线 第一步&#xff0c;JavaSE&#xff0c;这是Java…

工具类——Java导出EXCEL2(设置样式、加载并填充图片、加载指定模板、大数据量设置窗口大小与刷新频率)

文章目录 一、POI设置样式二、POI导出图片1.解释XSSFClientAnchor 三、加载指定模板导出四、&#x1f449;Workbook、XSSFWorkbook与SXSSFWorkbook1.大数据量导出1&#xff09;根据数据量选择XSSFWorkbook&#xff0c;还是SXSSFWorkbook 书接上篇&#xff1a;工具类——Java 浏…

机器学习笔记之密度聚类——DBSCAN方法(Python代码实现)

机器学习笔记之密度聚类——DBSCAN方法[Python代码实现] 引言基本思想概念介绍算法过程完整算法描述 DBSCAN \text{DBSCAN} DBSCAN的优点和缺陷 2023/4/25 \text{2023/4/25} 2023/4/25补充&#xff1a;基于 Python \text{Python} Python的代码实现 引言 本节将介绍密度聚类——…

【MySQL】索引与事务

索引&#xff1a; 什么是索引&#xff1f;为什么要⽤索引 为了提高查询效率而使用的一种数据结构把数据组织起来&#xff1b; 例如生活中的字典&#xff1a;声母&#xff0c;韵母&#xff0c;声调。 创建索引&#xff1a;自动创建的主键约束&#xff0c;唯一约束&#xf…

qiankun-微前端

项目结构 主应用&#xff1a; vue3 vite 子应用1&#xff1a;vue3 vite 背景介绍 项目采用了vue3vite构建的&#xff0c;又因为qiankun不支持vite&#xff0c;所以需要引用 vite-plugin-qiankun 插件来解决 主应用–改造 安装 qiankun npm install qiankun重新定义一个…

浅浅入门SpringBoot之Thymeleaf模板

Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP语言体系下也有模板引擎,甚至在 Javascript中也会用到模板引擎技术,Java生态下的模板引擎有 Thymeleaf、 Freemaker、Ⅴ elocity、…

【EMQX】EMQX管理控制台即EMQX Dashboard简介

EMQX管理控制台 一、EMQX Dashboard简介二、主要功能2.1 监控和管理 EMQX 集群中的相关信息与数据2.2 访问控制&#xff08;认证与授权&#xff09;管理2.3 数据集成2.4 在线配置热更新2.5 管理系统扩展能力2.6 全面的诊断工具 三、启动3.1 首次登录3.2 忘记密码 四、配置 Dash…

我老板:你根本不懂 React!

前言 我已经使用 React 多年&#xff0c;我确信我非常了解它&#xff0c;但最近我的老板对我说&#xff0c;“你根本不知道 React&#xff0c;你对它一无所知。” 我很生他的气&#xff0c;但他指出了我程序中的三个漏洞。我现在把它记录下来&#xff0c;也分享给还不知道的小…

用好ChatGPT,毕业直接走上人生巅峰

毕业论文交上去了&#xff0c;学分也攒齐了。考研没上岸的准毕业生们接下来要面对的不是惨烈的秋招&#xff0c;就是蹲家准备二战。生活终于要对各位小可爱们动手啦&#xff01; 不想默默承受社会的毒打&#xff1f; 不愿在屡战屡败屡败屡战的压力下秃头&#xff1f; 想必各位…

API 都有这些功能,你真的都知道么?

API&#xff08;应用程序编程接口&#xff09;可以提供以下功能&#xff1a; 数据传输&#xff1a;API可以在应用程序之间传输数据&#xff0c;包括发送和获取数据、更新数据等。 访问功能: API 可以调用另一个系统或应用程序的某些功能&#xff0c;例如获取天气&#xff0c;查…

基于无线传感器网络(WSN) 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本代码基于无线传感器网络&#xff0c;在两个节点&#xff08;源节点和目标节点&#xff09;之间找到最短路径&#xff0c;并开…

Java学习过程(韩顺平661-665)

网络通信是指在计算机网络中&#xff0c;通过网络连接的设备之间进行数据交换的过程。网络通信可以分为两种类型&#xff1a;有线网络通信和无线网络通信。 有线网络通信主要通过物理介质&#xff08;如光纤、双绞线等&#xff09;来传输数据&#xff0c;其中最常用的协议是以…

数字孪生新能源智慧充电桩Web3D可视化运维系统

放眼全球&#xff0c;近十年来&#xff0c;新能源汽车赛道堪称“热得发烫”。伴随着进入成年期的新能源汽车行业对相关配套设备支撑水平的提升&#xff0c;作为其“新基建”的充电桩领域表现更为突出的价值势能。过去&#xff0c;在一系列补贴政策和资本刺激下&#xff0c;充电…

七种MOS管栅极驱动电路

01 直接驱动 首先说一下电源IC直接驱动&#xff0c;下图是我们最常用的直接驱动方式&#xff0c;在这类方式中&#xff0c;我们由于驱动电路未做过多处理&#xff0c;因此我们进行PCB LAYOUT时要尽量进行优化。如缩短IC至MOSFET的栅极走线长度&#xff0c;增加走线宽度&#x…

《商用密码应用与安全性评估》第三章商用密码标准与产品应用3.4商用密码标准与产品

一、智能IC卡标准与产品 智能IC卡的分类 存储器卡&#xff1a;内部一般不包含密码安全机制&#xff0c;不具备信息处理能力&#xff0c;外部可对片内信息任意存取&#xff0c;因此存储器卡一般用于存放不需要保密的信息逻辑加密卡&#xff1a;逻辑加密卡内除了具有非易失性存…

redis缓存生产实践(一)---大key压缩

文章目录 前言一、缓存到底是使用String还是hash我该如何选择二、什么是大key及其影响2.1 什么是 Redis 大 key&#xff1f;2.2 大key带来的影响 三、大key压缩3.1 注解标记可能需要压缩的数据3.2 获取注解信息判断内存占用大小3.2 判断对象占用内存3.2 gzip压缩json3.2 判断当…