用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 / 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()
  • 这个函数用于绘制填充颜色的椭圆形。
  • 参数说明:
  • xy:椭圆中心点的坐标
  • sita:旋转角度
  • ab:椭圆的长轴和短轴
  • pq:起始角度和结束角度
  • c:填充颜色
  • 主要步骤:
    1. 设置填充颜色并准备绘制
    2. 移动画笔到起始点
    3. 根据角度范围绘制椭圆形
    4. 结束填充
  • 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 类似,不同之处在于这里没有填充颜色的操作。
  •         然后是主程序部分,主要包括以下绘制过程:

    1. 绘制篮球:

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

    5. 设置了画笔的粗细和颜色。
    6. 调用了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 / 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库绘制卡通人物有所帮助!

    物联沃分享整理
    物联沃-IOTWORD物联网 » 用Python Turtle绘制坤坤打球

    发表评论