【python】python turtle绘制坤坤打球

一、效果图:

   二、准备工作

(1)、导入必要的模块:

       代码首先导入了需要使用的模块:requests、lxml和csv。

import requests
from lxml import etree
import csv

        如果出现模块报错

c124a1693bfc457ba1f2909ee9d299fc.png

        进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

         我大致罗列了以下几种国内镜像源:

清华大学
https://pypi.tuna.tsinghua.edu.cn/simple阿里云
https://mirrors.aliyun.com/pypi/simple/豆瓣
https://pypi.douban.com/simple/ 百度云
https://mirror.baidu.com/pypi/simple/中科大
https://pypi.mirrors.ustc.edu.cn/simple/华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

三、介绍

        通过 Python 的 Turtle 模块,我们可以轻松地在屏幕上绘制各种形状和动画效果。本次项目旨在利用 Turtle 模块创建一个坤坤打篮球的动画效果

四、详解代码

        首先,导入了必要的库:

from turtle import *
from math import *

        这里使用了turtle库来进行图形绘制,同时使用math库来进行数学计算。

        接下来是定义了两个函数ty_cty,用来绘制填充颜色的椭圆形和不填充颜色的椭圆形。这两个函数主要用到了cossin等三角函数来计算椭圆上的点的位置,以及控制画笔的移动。

1. 函数 ty_c

def ty_c(x, y, sita, a, b, p, q, c):fillcolor(c)si = 2 * pi / 100penup()goto(x + a * cos(sita), y + a * sin(sita))pendown()t = 0for i in range(201):if i * si + sita <= p:penup()goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))pendown()elif p <= i * si + sita <= q + 2 * pi / 100:if t == 0:begin_fill()t = 1goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))end_fill()
  • 这个函数用于绘制填充颜色的椭圆形。
  • 参数说明:
    • xy:椭圆中心点的坐标
    • sita:旋转角度
    • ab:椭圆的长轴和短轴
    • pq:起始角度和结束角度
    • c:填充颜色
  • 主要步骤:
    1. 设置填充颜色并准备绘制
    2. 移动画笔到起始点
    3. 根据角度范围绘制椭圆形
    4. 结束填充

2. 函数 ty

def ty(x, y, sita, a, b, p, q):si = 2 * pi / 100penup()goto(x + a * cos(sita), y + a * sin(sita))pendown()for i in range(201):if i * si + sita < p:penup()goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))pendown()elif p <= i * si + sita <= q + 2 * pi / 100:goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  • 这个函数用于绘制非填充颜色的椭圆形。
  • 参数和步骤与函数 ty_c 类似,不同之处在于这里没有填充颜色的操作。

        然后是主程序部分,主要包括以下绘制过程:

  1. 绘制篮球:

    • 首先设置了画笔的粗细和颜色。
    • 调用了ty_cty函数来绘制篮球的图案,包括篮球的表面和阴影等部分。
  2. 绘制人物头像:

    • 设置了画笔的粗细和颜色。
    • 调用了ty_c函数来绘制人物头像的脸部、眼睛、嘴巴、腮红、领口、衣服等元素。

        最后使用done()函数来保持图形窗口不关闭。

        整体来说,这段代码利用了turtle库中的绘图功能,通过控制画笔的移动和路径来绘制出篮球和人物头像的效果。

绘制卡通人物

  1. 首先,我们使用ty_c函数绘制了一个篮球的图案,并填充了橙色的颜色。然后使用ty函数绘制了篮球的纹理,使其看起来更加逼真。

  2. 接着,我们使用ty_c函数绘制了一个黄色的脸部图案。然后绘制了两个白色的眼睛,并在眼睛中间分别绘制了黑色的眼珠,使眼睛看起来更加生动。

  3. 紧接着,使用ty_c函数绘制了一个橙色的嘴巴,并绘制了嘴巴的轮廓,使其看起来更加立体。

  4. 接下来,我们使用红色的颜料在脸部两侧绘制了腮红,增加了卡通人物的可爱程度。

  5. 最后,我们绘制了卡通人物的衣服、领口和肩带,使整个图案更加完整。

五、完整代码:

from turtle import *
from math import *
def ty_c(x, y, sita, a, b, p, q, c):fillcolor(c)si = 2 * pi / 100penup()goto(x + a * cos(sita), y + a * sin(sita))pendown()t = 0for i in range(201):if i * si + sita <= p:penup()goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \, y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))pendown()elif p <= i * si + sita <= q + 2 * pi / 100:if t == 0:begin_fill()t = 1goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \, y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))end_fill()
def ty(x, y, sita, a, b, p, q):si = 2 * pi / 100penup()goto(x + a * cos(sita), y + a * sin(sita))pendown()for i in range(201):if i * si + sita < p:penup()goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \, y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))pendown()elif p <= i * si + sita <= q + 2 * pi / 100:goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \, y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))speed(0)hideturtle()
# 篮球
pensize(10)
pencolor('black')
ty_c(350, -267, 0, 161, 161, 0, 2 * pi, '#ff9900')
ty(350, -267 + 161 + 50, 0, 161, 161, 7 * pi / 6 + pi / 12, 11 * pi / 6 - pi / 12)
ty(350, -267 - 161 - 50, 0, 161, 161, pi / 6 + pi / 12, 5 * pi / 6 - pi / 12)
ty(350, -267 + 161 + 330, 0, 500, 500, 8.5 * pi / 6, 9.5 * pi / 6)
# 脸
pensize(20)
ty_c(0, 0, 0, 657 / 2, 576 / 2, 0, 2 * pi, '#ffcc00')
# 眼睛
pensize(22)
ty_c(55, 52, 0, 106, 104, 0, 2 * pi, 'white')
ty_c(-165, 60, 0, 101, 99, 0, 2 * pi, 'white')
pensize(20)
ty_c(4, 79, 0, 14, 14, 0, 2 * pi, 'black')
ty_c(-201, 80, 0, 14, 14, 0, 2 * pi, 'black')
# 嘴巴
pensize(12)
ty_c(-66, -76, 0, 102, 62, 0, 2 * pi, '#ff6600')
penup()
goto(-155, -50)
pendown()
goto(-134, -64)
goto(-115, -74)
goto(-90, -82)
goto(-67, -86)
goto(-47, -85)
goto(-25, -82)
goto(0, -77)
goto(15, -66)
goto(25, -55)
# 腮红
pensize(1)
pencolor('red')
ty_c(-256, -90, 15 * pi / 180, 49, 66, 0, 2 * pi + 15 * pi / 180, 'red')
ty_c(201, -105, 0, 73, 75, 0, 2 * pi, 'red')
# 领口
color('black', 'black')
pensize(10)
penup()
goto(-275, -227)
pendown()
begin_fill()
goto(-241, -209)
goto(-189, -233)
goto(-166, -260)
goto(-127, -272)
goto(-88, -252)
goto(-49, -233)
goto(-19, -227)
goto(51, -237)
goto(108, -242)
goto(168, -242)
goto(210, -233)
goto(250, -206)
goto(252, -254)
goto(216, -269)
goto(-13, -353)
goto(-65, -362)
goto(-109, -356)
goto(-178, -317)
goto(-214, -296)
goto(-246, -266)
goto(-272, -245)
goto(-275, -227)
end_fill()
# 衣服
penup()
goto(-244, -287)
pendown()
begin_fill()
goto(-269, -314)
goto(-310, -405)
goto(-304, -410)
goto(-21, -416)
goto(317, -410)
goto(331, -398)
goto(323, -381)
goto(319, -356)
goto(315, -320)
goto(275, -266)
goto(263, -257)
pensize(15)
pencolor('#c0c0c0')goto(252, -254)
goto(216, -269)
goto(-13, -353)
pensize(13)
goto(-65, -362)
goto(-109, -356)
pensize(10)
goto(-178, -317)
goto(-214, -296)
goto(-246, -284)
end_fill()
# 肩带
penup()
goto(-206, -310)
pendown()
pensize(30)
goto(-183, -363)
goto(-180, -384)
goto(-184, -414)penup()
goto(229, -285)
pendown()
goto(203, -360)
pensize(34)
goto(190, -415)penup()
goto(-115, -360)
pendown()
pensize(8)
goto(-96, -411)
goto(-75, -413)
goto(18, -371)
goto(69, -341)
goto(105, -325)
pensize(12)
goto(177, -297)
# 中分
pencolor('#808080')
pensize(1)
penup()
goto(67, 393)
pendown()
fillcolor('#808080')
begin_fill()
goto(43, +419)
goto(13, +431)
goto(-96, +426)
goto(-156, +402)
goto(-239, +336)
goto(-277, +300)
goto(-307, +263)
goto(-372, +153)
goto(-383, +101)
goto(-373, +57)
goto(-339, +38)
goto(-298, +40)
goto(-278, +61)
goto(-236, +74)
goto(-176, +103)
goto(-163, +128)
goto(-135, +224)
goto(-95, +265)
goto(-64, +271)
goto(-30, +253)
goto(22, +269)
goto(61, 268)
goto(75, 202)
goto(93, 132)
goto(108, 71)
goto(136, 31)
goto(171, 4)
goto(236, -10)
goto(277, -10)
goto(323, -25)
goto(363, -61)
goto(404, -35)
goto(423, 14)
goto(453, 71)
goto(457, 120)
goto(441, 170)
goto(398, 227)
goto(331, 285)
goto(283, 323)
goto(232, 360)
goto(168, 396)
goto(122, 416)
goto(87, 406)
goto(67, 393)
end_fill()
pencolor('black')
pensize(4)
goto(-30, +253)
done()

总结

        通过使用Python中的Turtle库,我们可以轻松绘制出精美的图案,无论是简单的几何图形还是复杂的卡通人物。Turtle库不仅适合初学者学习绘图,也可以用于创作出独特的艺术作品。希望本文对您了解如何使用Turtle库绘制卡通人物有所帮助!

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

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

相关文章

智慧公厕:跨界融合,打造智慧城市新名片

随着城市化进程的不断加快&#xff0c;公共厕所建设成为一个亟待解决的问题。传统的公厕存在着管理繁琐、卫生差、服务不到位等一系列问题&#xff0c;与城市发展的节奏不协调。为此&#xff0c;推进新型智慧公厕建设成为了一个重要的解决方案。智慧公厕的建设需要推进技术融合…

Day32 贪心算法 part02

Day32 贪心算法 part02 122.买卖股票的最佳时机 II 我的思路&#xff1a; 只有当后一天比前一天价格高时&#xff0c;才出售&#xff0c;profit才累加 解答&#xff1a; class Solution {public int maxProfit(int[] prices) {if(prices.length 0) {return 0;}int profit …

【论文精读】VIT:vision transformer论文

相关文章 【论文精读】Transformer&#xff1a;Attention Is All You Need 文章目录 相关文章一、文章概览&#xff08;一&#xff09;研究背景&#xff08;二&#xff09;核心思路&#xff08;三&#xff09;相关工作&#xff08;三&#xff09;文章结论 二、模型细节&#x…

数据库中什么时候使用自增id,什么时候不能使用

在数据库中&#xff0c;自增ID的使用场景主要有以下几个&#xff1a; 插入记录时不需要指定ID&#xff1a;使用自增ID可以避免手动指定ID&#xff0c;从而避免了因重复ID导致的错误数据库自动编号&#xff0c;速度快&#xff1a;数据库会按照预设的步长&#xff08;默认为1&am…

【MySQL系列】优化数据库时区设置,确保数据一致性与准确性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Neo4J导入OWL文件

1.neosemantics版本分为4.0以下和4.0以上&#xff0c;两者区别大&#xff0c;我使用的是4.0以上版本&#xff0c;所以参考的是以下文章 owl导入Neo4j-CSDN博客 Neo4j图数据库简介、安装、使用、导入RDF文件_rdf导入neo4j-CSDN博客 2.不同版本的有些函数是不能通用的。 比如…

图论基础|深度优先dfs、广度优先bfs

dfs 与 bfs 区别 提到深度优先搜索&#xff08;dfs&#xff09;&#xff0c;就不得不说和广度优先搜索&#xff08;bfs&#xff09;有什么区别 先来了解dfs的过程&#xff0c;很多录友可能对dfs&#xff08;深度优先搜索&#xff09;&#xff0c;bfs&#xff08;广度优先搜索…

鸿蒙Harmony应用开发—ArkTS-@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二…

MySQL--select count(*)、count(1)、count(列名) 的区别你知道吗?

MySQL select count(*)、count(1)、count(列名) 的区别&#xff1f; 这里我们先给出正确结论&#xff1a; count(*)&#xff0c;包含了所有的列&#xff0c;会计算所有的行数&#xff0c;在统计结果时候&#xff0c;不会忽略列值为空的情况。count(1)&#xff0c;忽略所有的列…

AtCoder Beginner Contest 346

A. Adjacent Product(循环) 题意 给出 N N N个数字 A 1 , A 2 , … , A N A_1, A_2, \ldots, A_N A1​,A2​,…,AN​。定义 B i A i A i 1 ( 1 ≤ i ≤ N − 1 ) B_i A_i \times A_{i 1}(1 \le i \le N - 1) Bi​Ai​Ai1​(1≤i≤N−1)。 请你打印 B 1 , B 2 , … , B …

javase day09笔记

第九天课堂笔记 构造方法★★★★ 完成对属性赋值构造方法的名字必须与类名一致没有返回值类型public 类名&#xff08;【参数】&#xff09;{ }构造方法在创建对象时同步执行没写无参构造&#xff0c;系统默认提供写了构造方法&#xff0c;系统不再提供构造方法:重载 引用数…

设计模式,策略模式

策略模式概述 策略模式&#xff0c;即与解决问题的策略有关的模式&#xff0c;该模式旨在更好的实现策略的实现。策略模式分为三个部分&#xff1a;环境、抽象策略角色、具体策略角色。策略模式能使得更好地管理和使用一类算法。 环境&#xff08;context&#xff09;&#xf…

【状态估计】概率论基础

《机器人学的状态估计》是入行SLAM的经典书籍之一&#xff0c;其中有大量的公式相关的内容&#xff0c;看起来还是比较艰涩的。最近重新读一遍&#xff0c;顺便将其中的一些内容记录下来&#xff0c;方便以后回看。 概率密度函数 定义 定义 x x x为区间 [ a . b ] [a.b] [a.b…

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边&#xff0c;左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…

智能新纪元:AI大模型学习的奥秘与挑战

在当前技术环境下&#xff0c;AI大模型学习不仅要求研究者具备深厚的数学基础和编程能力&#xff0c;还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xff0c;AI大模型学习能够不断提升模型的准确性和效率&#xff0c;为人类生活和工作带来更多便利。…

Naive UI:一个 Vue 3 组件库,比较完整,主题可调,使用 TypeScript,快有点意思。

在当今的前端开发领域&#xff0c;Vue 3已成为中后台应用的首选框架。为了满足开发者的需求&#xff0c;各种组件库如雨后春笋般涌现。其中&#xff0c;Naive UI以其独特的优势&#xff0c;成为了Vue 3开发者的得力助手。本文将深入探讨Naive UI的特性、优势以及如何使用它来提…

浏览器强缓存和弱缓存的主要区别

浏览器强缓存与弱缓存 浏览器的缓存机制主要分为两种&#xff1a;强缓存与协商缓存&#xff08;也称弱缓存&#xff09;。 强缓存 强缓存是指浏览器在请求一个资源时&#xff0c;不与服务器发生通信&#xff0c;直接从本地缓存中获取资源。如果存在有效的强缓存&#xff0c;…

docker镜像安装空间不足no space left on device

报错&#xff1a;Error processing tar file(exit status 1): open /usr/local/lib/libmkl_tbb_thread.so.1: no space left on device 原先docker模型保存位置&#xff1a; docker info -f ‘{{ .DockerRootDir}}’ docker 高点版本&#xff0c;这里26.0 解决参考&#xf…

学习次模函数-第1章 引言

许多组合优化问题可以被转换为集合函数的最小化&#xff0c;集合函数是在给定基集合的子集的集合上定义的函数。同样地&#xff0c;它们可以被定义为超立方体的顶点上的函数&#xff0c;即&#xff0c;其中是基集合的基数-它们通常被称为伪布尔函数[27]。在这些集合函数中&…

Linux 创建交换空间

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…