一、效果图:
二、准备工作
(1)、导入必要的模块:
代码首先导入了需要使用的模块:requests、lxml和csv。
import requestsfrom lxml import etreeimport csv
如果出现模块报错
进入控制台输入:建议使用国内镜像源
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_c
和ty
,用来绘制填充颜色的椭圆形和不填充颜色的椭圆形。这两个函数主要用到了cos
和sin
等三角函数来计算椭圆上的点的位置,以及控制画笔的移动。
1. 函数 ty_c
def ty_c(x, y, sita, a, b, p, q, c): fillcolor(c) si = 2 * pi / 100 penup() goto(x + a * cos(sita), y + a * sin(sita)) pendown() t = 0 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: if t == 0: begin_fill() t = 1 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)) end_fill()
这个函数用于绘制填充颜色的椭圆形。参数说明: x
和 y
:椭圆中心点的坐标sita
:旋转角度a
和 b
:椭圆的长轴和短轴p
和 q
:起始角度和结束角度c
:填充颜色主要步骤: 设置填充颜色并准备绘制移动画笔到起始点根据角度范围绘制椭圆形结束填充 2. 函数 ty
def ty(x, y, sita, a, b, p, q): si = 2 * pi / 100 penup() 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
类似,不同之处在于这里没有填充颜色的操作。 然后是主程序部分,主要包括以下绘制过程:
绘制篮球:
首先设置了画笔的粗细和颜色。调用了ty_c
和ty
函数来绘制篮球的图案,包括篮球的表面和阴影等部分。 绘制人物头像:
设置了画笔的粗细和颜色。调用了ty_c
函数来绘制人物头像的脸部、眼睛、嘴巴、腮红、领口、衣服等元素。 最后使用done()
函数来保持图形窗口不关闭。
整体来说,这段代码利用了turtle库中的绘图功能,通过控制画笔的移动和路径来绘制出篮球和人物头像的效果。
绘制卡通人物
首先,我们使用ty_c
函数绘制了一个篮球的图案,并填充了橙色的颜色。然后使用ty
函数绘制了篮球的纹理,使其看起来更加逼真。
接着,我们使用ty_c
函数绘制了一个黄色的脸部图案。然后绘制了两个白色的眼睛,并在眼睛中间分别绘制了黑色的眼珠,使眼睛看起来更加生动。
紧接着,使用ty_c
函数绘制了一个橙色的嘴巴,并绘制了嘴巴的轮廓,使其看起来更加立体。
接下来,我们使用红色的颜料在脸部两侧绘制了腮红,增加了卡通人物的可爱程度。
最后,我们绘制了卡通人物的衣服、领口和肩带,使整个图案更加完整。
五、完整代码:
from turtle import *from math import *def ty_c(x, y, sita, a, b, p, q, c): fillcolor(c) si = 2 * pi / 100 penup() goto(x + a * cos(sita), y + a * sin(sita)) pendown() t = 0 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: if t == 0: begin_fill() t = 1 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)) end_fill()def ty(x, y, sita, a, b, p, q): si = 2 * pi / 100 penup() 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库绘制卡通人物有所帮助!