《Python趣味工具》——自制emoji2(2)
今天,我们将会完成以下2个内容:
- 绘制静态emoji
- 总结turtle中常用的绘图函数
文章目录
- 一、绘制静态emoji:
- :sparkles: 画脸:
- :sparkles:绘制嘴巴:
- :sparkles:绘制眼白:
- 绘制眼白-Part1:
- 绘制眼白—part2:
 
- :sparkles:绘制黑眼珠:
 
- 三、完整代码:
- 四、函数函数总结:
- 运动控制命令:
- 画笔控制命令:
- 全局控制命令:
 
一、绘制静态emoji:
绘制方法:拆解绘制法
将绘图步骤拆解完成后,标记出各个部分的起始坐标点位,方便后面绘图。

✨ 画脸:
首先我们绘制圆脸部分,主要步骤是:
1.定义一个绘制圆脸的函数
 2.用黑色画笔画圆
 3.用金色填充圆的内部

 示例代码如下:
# 从turtle模块中导入所有函数
from turtle import *
# 定义draw_face()函数绘制脸部# 首先,定义一个draw_face()函数绘制脸部
def draw_face():
# 进入函数的主体部分后,第一步需要将小乌龟放置到我们期待的位置:(-120,0)# 抬起画笔penup()# 移动到坐标点为(-120,0)的地方goto(-120,0)# 落笔pendown()# 将画笔颜色设置为黑色"black"pencolor("black")# 将画笔粗细设置为4pensize(4)# 调整海龟朝向-90度方向seth(-90)# 开始填充颜色begin_fill()# 画圆,圆的半径为130,圆心角为360度circle(130,360)# 填充颜色为"gold"fillcolor("gold")# 停止填充颜色end_fill()相关步骤如下:
1.定义函数,设置初始位置
为了避免留下小乌龟从初始位置移动到(-120,0)的轨迹,我们可 以:
🐢penup()抬起小乌龟
🐢goto()把小乌龟移动到目标位置
🐢再使用pendown()放下小乌龟
2.设置颜色、大小和朝向
设置画笔颜色和大小:
🐢使用pencolor()将画笔颜色设置为黑色’‘black’',
🐢使用pensize()函数将画笔粗细设置为4.
3.设置画笔的朝向:
为了圆脸的位置正确,需要把小乌龟的头竖直向下放置:
使用seth()函数,设置画笔朝向-90度的方向开始绘制。
⭐️两种调整角度的方法
- 1.相对角度
以海龟的朝向为基准进行转向。
例如:left(),right()- 2.绝对角度
以坐标轴方向为基准调整角度。
例如:seth()
4.绘制圆并填充颜色
绘制圆:
使用circle()函数设置圆的半径为130,圆心角度为360度
填充颜色:
🐢用fillcolor()函数将填充颜色设置为"gold"
🐢用begin_fill()函数设置填充起点
🐢用end_fill()函数设置填充终点
✨绘制嘴巴:
绘制嘴巴可以分为以下几步:
1.画笔移动到坐标点(-80,-10)的位置。
 2.朝向-90度的方向
 3.绘制一个半径为90的半圆。

# 定义draw_mouth() 函数绘制嘴巴   
def draw_mouth():# 抬起画笔penup()# 移动到坐标点为(-80,-10)的位置goto(-80,-10)# 落笔pendown()# 调整海龟朝向-90度方向seth(-90)# 绘制一个半径为90,圆心角为180的半圆circle(90,180)  
相关步骤如下:
1.设置画笔的初始位置:
和前面绘制圆脸一样,我们也需要使用penup()等函数,将动小乌龟到目标位置:(-80,-10)
2.设置画笔的朝向:
为了嘴巴的位置正确,我们也需要把小乌龟的头竖直向下放置:seth(-90)
3.绘制嘴巴:
使用circle()函数设置圆的半径为90,圆心角度为180度
✨绘制眼白:
思考一下,眼白可以怎么绘制呢?
1.从嘴角位置向上直走60步
 2.将海龟角度设置为155度
 3.将画笔颜色设置为白色,粗度为20
 4.绘制一个半径为100,圆心角为45度的圆弧
 
绘制眼白-Part1:

 相关步骤如下:
1.设置画笔的初始位置:
🐢移动到目标位置前,使用penup()隐藏移动痕迹
🐢在绘制完嘴巴的基础上,我们直接前进60步,即可到达目标位置:forward(60)
🐢到达后,使用pendown()将小乌龟放置到画布上~
2.设置画笔的朝向:
将海龟角度设置为155度:seth(155)
3.设置画笔的粗细和颜色:
🐢使用pencolor()将画笔颜色设置为白色’‘white’',
🐢使用pensize()函数将画笔粗细设置为20.
4.绘制眼白:
使用circle()函数设置圆的半径为100,圆心角度为45度
示例代码如下:
# 定义eyes_white()函数绘制眼白   
def eyes_white():# 抬起画笔penup()# 往前直走60步forward(60)# 将角度调整为155度seth(155)# 落笔pendown()# 设置画笔粗细为20pensize(20)# 设置画笔颜色为"white"pencolor("white")# 绘制一个半径为100,圆心角为45的弧形circle(100,45)# 抬笔penup()ps.绘制完记得抬起小乌龟
绘制眼白—part2:

绘制第二部分的眼白也是类似的:
- 抬起画笔,朝向180度的方向(正左)移动40步
- 角度调整为155度
- 绘制一个半径为100,圆心角为45度的圆弧
- 抬起画笔,朝向180度的方向(正左)移动40步
- 角度调整为155度
- 绘制一个半径为100,圆心角为45度的圆弧

✨绘制黑眼珠:
绘制黑眼珠的方法和绘制眼白的方法是类似的
1.画笔朝向0度方向,向前移动6步
 2.设置画笔粗细为15,颜色为黑色
 3.画一个半径为5的圆
 4.向前移动110步,再绘制一个半径为5的圆

太棒啦!现在我们已经完成了滑稽emoji的绘制~
回顾绘制的过程:
 1.将图形拆解为不同的区域
 2.分区进行绘制
 3.定义函数使区域更明晰
在绘制你需要的图形时也可以使用这样的方法哦~

三、完整代码:
# 导入turtle中的全部函数
from turtle import *
# 定义draw_face()函数绘制脸部
def draw_face():# 抬起画笔penup()# 移动到坐标点为(-120,0)的地方goto(-120,0)# 落笔pendown()# 将画笔颜色设置为黑色"black"pencolor("black")# 将画笔粗细设置为4pensize(4)# 调整海龟朝向-90度方向seth(-90)# 开始填充颜色begin_fill()# 画圆,圆的半径为130,圆心角为360度circle(130,360)# 填充颜色为"gold"fillcolor("gold")# 停止填充颜色end_fill()
# 定义draw_mouth() 函数绘制嘴巴   
def draw_mouth():# 抬起画笔penup()# 移动到坐标点为(-80,-10)的位置goto(-80,-10)# 落笔pendown()# 调整海龟朝向-90度方向seth(-90)# 绘制一个半径为90,圆心角为180的半圆circle(90,180)# 定义eys_white()函数绘制眼白   
def eyes_white():# 使用penup()函数抬起画笔penup()# 使用forward()函数往前直走60步forward(60)# 使用seth()函数将角度调整为155度seth(155)# 使用pendown()函数落笔pendown()# 使用pensize()函数设置画笔粗细为20pensize(20)# 使用pencolor()函数设置画笔颜色为"white"pencolor("white")# 使用circle()函数绘制一个半径为100,圆心角为45的弧形circle(100,45)# 使用penup()函数抬笔penup()# 使用seth()函数朝向180度方向seth(180)# 使用forward()函数向前走40步forward(40)# 使用seth()函数将角度调整为155度seth(155)# 使用pendown()函数落笔pendown()# 使用circle()函数绘制一个半径为100,圆心角为45度的圆弧circle(100,45)# 使用penup()函数抬笔penup()#  定义一个eyes_black()函数绘制黑眼珠
def eyes_black():# 使用seth()函数将角度设置为0seth(0)# 使用forward()函数前进6步forward(6)# 使用pendown()函数落笔pendown()# 使用pensize()函数设置画笔粗细为15pensize(15)# 使用pencolor()函数设置画笔颜色为"black"pencolor("black")# 使用circle()函数绘制一个半径为5,圆心角为360度circle(5,360)# 使用penup()函数抬笔penup()# 使用forward()函数前进110步forward(110)# 使用pendown()函数落笔pendown()# 使用circle()函数绘制一个半径为5的圆circle(5,360)# 使用hideturtle()函数隐藏画笔hideturtle()# 调用draw_face()函数画脸
draw_face()
# 调用draw_mouth()函数画嘴巴
draw_mouth()
# 调用eyes_white()函数画白眼珠
eyes_white()
# 调用eyes_black()函数画黑眼珠
eyes_black()
# 调用done()暂停
done()
四、函数函数总结:
学到现在或许你有一些疑问:这么多函数太容易记混了,有没有办法归类呢?
在这里我们可以把turtle中常用函数分成三类:
1.运动控制命令
 2.画笔控制命令
 3.全局控制命令
运动控制命令:
1.前进后退
 2.转向
 3.控制速度
 4.移动到固定点位
 5.画圆
 等等…………

画笔控制命令:
1.改变画笔的大小和颜色
 2.控制画笔的显示和隐藏
 3.控制填充颜色
 等等…………

全局控制命令:
全局控制命令是指可以应用在整个画布和绘画过程中的命令。
1.清空窗口
 2.写文本
 3.控制动画播放

相关文章:
 
《Python趣味工具》——自制emoji2(2)
今天,我们将会完成以下2个内容: 绘制静态emoji总结turtle中常用的绘图函数 文章目录 一、绘制静态emoji::sparkles: 画脸::sparkles:绘制嘴巴::sparkles:绘制眼白:绘制眼白-Part1:绘制眼白—pa…...
【面试刷题】——C++四种类型转化
C支持多种类型转换操作,其中包括四种主要类型转换方式: 隐式类型转换(Implicit Conversion): 隐式类型转换是自动发生的类型转换,由编译器自动完成。 它用于处理不同数据类型之间的运算,例如将…...
 
集成Activiti-Modeler流程设计器
集成Activiti-Modeler流程设计器 Activiti Modeler 是 Activiti 官方提供的一款在线流程设计的前端插件,可以方便流程设计与开发人员绘制流程图,保存流程模型,部署至流程定义等等。 1、材料准备 首先我们需要获取activiti-explorer.zip&…...
 
【深度学习】 Python 和 NumPy 系列教程(十一):NumPy详解:3、数组数学(元素、数组、矩阵级别的各种运算)
目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 1. 元素级别 a. 直接运算 b. 加法:np.add()函数 c. 减法:np.subtract()函数 d. 乘法…...
 
python难题切片处理
边距折叠 Html经常出现的一个外边距折叠,可能有人的不太理解,或者说不知道怎么解决、我们来着重来看下: 当两个div盒子模型连续出现的时候并且同时应用了一个margin外边距,会出现边距重叠的现象: .Div {width:150px; #定义公共的盒子样式 Height:150px; Margin:20p…...
 
《研发效能(DevOps)工程师(中级)认证》证书查询方式和路径丨IDCF
由国家工业和信息化部教育与考试中心颁发的职业技术证书,也是国内首个《研发效能(DevOps)工程师国家职业技术认证》,IDCF社区作为官方指定培训中心,邀请了多位业界知名专家讲师(部分专家讲师名单:王立杰、杜伟忠、陈老…...
 
NVR添加rtsp流模拟GB28181视频通道
一、海康、大华监控摄像头和硬盘录像机接入GB28181平台配置 1、海康设备接入配置 通过web登录NVR管理系统,进入网络,高级配置界面,填入GB28181相关参数。 将对应项按刚才获取的配置信息填入即可,下面的视频通道的编码ID可以保持…...
 
浅谈C++|文件篇
引子: 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化。C中对文件操作需要包含头文件< fstream > 。 C提供了丰富的文件操作功能,你可以使用标准库中的fstream库来进行文件的读取、写入和定位…...
 
C++ QT qml 学习之 做个登录界面
最近在学习QT,也初探到qml 做ui 的灵活性与强大,于是手痒痒,做个demo 记录下学习成果 主要内容是如何自己编写一个按钮以及qml多窗口。 参考WX桌面版,做一个登录界面,这里面按钮是写的一个组合控件,有 按…...
LLM 06-大模型架构
LLM 06-大模型架构 6.1 大模型之模型概括 语言模型的一开始就可以被看做是一个黑箱,当前大规模语言模型的能力在于给定一个基于自身需求的prompt就可以生成符合需求的结果。形式可以表达为: p r o m p t ⇝ c o m p l e t i o n prompt \leadsto compl…...
 
openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据
文章目录 openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据 openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据 在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。 SQL不…...
【k8s】kube-proxy 工作模式
文章目录 Userspace模式:iptables模式:负载均衡(Load Balancing) LB轮询(Round Robin):SessionAffinity:最少连接(Least Connection):IP哈希&…...
 
Linux:Centos9 《下载-安装》
下载 Download (centos.org)https://www.centos.org/download/ 安装 选择第一个安装centos 根据自己需要的语言环境选择即可 这里选择要安装的磁盘,然后点击完成 这里选择第一个就行带有图形化 然后我们去对这两个进行设置就行 这两个地方自己进行设置就行 耐心等…...
 
数字化管理平台建设实践
在勘察设计行业,各企业加速推进数字化转型。通过管理要素数字化,不断优化内部组织运营效率;通过生产手段数字化、技术产品数字化,提升服务质量,改善客户体验;通过数字化营销,精准对接市场需求&a…...
Linux命令(80)之sort
linux命令之sort 1.sort介绍 linux命令sort用于将文本文件内容以行为单位加以排序;sort命令默认按每行的第一个字符排序,根据首字母的ASCII码值进行升序(从小到大排列)。 sort的默认分隔符是空白(空格和tab),多少空白都算一个分隔符。 2.…...
[k8s] kubectl port-forward 和kubectl expose的区别
kubectl port-forward 和 kubectl expose 是 Kubernetes 命令行工具 kubectl 提供的两种不同方式来公开服务。 kubectl port-forward kubectl port-forward 命令用于在本地主机和集群内部的 Pod 之间建立一个临时的端口转发通道。 该命令将本地机器上的一个端口绑定到集群内部…...
 
vscode如何设置文件折叠
随着项目的不断迭代开发,复杂度越来越高,配置文件越来越多,导致vscode左侧文件列表展示非常不直观,幸好可以通过文件折叠来简化展示效果,把同类相关的文件折叠在一块展示,方便查看配置文件。配置好后的效果…...
 
Linux centos7 bash编程训练
训练编写一段代码,打印输出100之内的明7暗7,同时要求每5个数字打印在一行。 此项训练主要是考察for循环的使用,及条件判断表达式的设置和不同写法的应用。 常用的for循环有四种写法(如打印1-100的整数): …...
k8s集群换ip
1.把/etc/kubernetes/*.conf中所有的旧ip换成新ip cd /etc/kubernetes/ find . -type f | xargs sed -i "s/$oldip/$newip/"2.替换$HOME/.kube/config文件中的旧ip为新ip(注意sudo的话需要改root下的) cd $HOME/.kube/ find . -type f | xargs sed -i "s/$old…...
选择HAL库还是标准库
选择HAL库还是标准库呢?HAL库是趋势,标准库不再升级了,转HAL库是大势所趋。HAL库有优点,也有自身的不足,建议初学者还是从标准库入手。 标准库是单片机开发的基本库,它把“用寄存器实现的功能”写成一个函…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
 
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
 
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
 
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
 
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
 
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
 
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...



