用Python代码画世界杯吉祥物拉伊卜(附代码)

news2024/10/6 4:02:23

用Python代码画世界杯吉祥物拉伊卜(附代码)

世界杯正在火热进行中,世界杯的吉祥物拉伊卜也非常火。

本文用Python代码画世界杯吉祥物。不废话,可以直接先看视频效果。

视频效果

用Python代码画世界杯吉祥物拉伊卜

实现方法介绍

本文的绘图工具使用Python的标准库turtle库,无需安装,导入即可使用。

部分函数用法介绍:

画布设置

  • title(): 设置窗口的标题。
  • bgpic():设置背景图片。
  • setup(width, height, x, y): 设置窗口大小和窗口左上角在屏幕中的位置。
  • shape():设置鼠标的形状。
  • done(): 绘图结束后,不自动关闭窗口。

画笔设置

  • pencolor(color): 设置画笔颜色。
  • width(): 设置画笔宽度。
  • speed(int): 设置画笔的速度,传入1~10的数字,1最慢,10最快。传入其他值会更快,但是没有鼠标移动的动画效果。
  • penup(): 提起画笔,提起后移动画笔不会留下痕迹。
  • pendown(): 落下画笔,开始绘图前先将画笔落下。
  • setx(value): 设置画笔的x轴坐标。
  • sety(value): 设置画笔的y轴坐标。
  • towards(x, y): 设置画笔指向的点。
  • setheading(): 设置画笔的方向。与towards()配合可以设置画笔指向某个点,如setheading(towards(0, 0))可以设置画笔指向原点。
  • pos(): 返回画笔当前的坐标。鼠标移动一段时间后可以print()打印此函数获取鼠标位置。
  • heading(): 返回画笔当前的方向。

画笔操作

  • circle(radius[, extent=arc]): 画一个圆,传入圆的半径,根据画笔的方向控制圆心的位置,圆心与画笔的方向垂直。传入弧度值可以画出指定弧度的圆弧。
  • left(angle): 画笔左转,传入任意一个目标角度。
  • right(angle): 画笔右转。
  • forward(distance): 画笔前进一段距离。
  • backward(distance): 画笔后退一段距离。
  • goto(x, y): 移动画笔到指定坐标。

颜色填充

  • begin_fill(): 开始填充。
  • fillcolor(color): 设置图形中填充的颜色。
  • end_fill(): 结束填充。

具体画图时,调整画笔的起点,设置不同的转角度数和不同的前进长度,可以得到不同形状的弧线,用弧线构成完整的图形。

与原图对比

在这里插入图片描述
部分代码

# coding=utf-8
from turtle import *
import time

def set_start(x, y, w=0.5, c='black'):
    # 设置画笔开始的位置,绘制每一个部分的图形时,将鼠标移到起始点
    penup()  # 提起画笔
    setx(x)  # 设置画笔的x坐标
    sety(y)  # 设置画笔的y坐标
    setheading(towards(0, 0))  # 默认设置画笔指向坐标原点0,0
    width(w)  # 设置画笔的宽度
    pencolor(c)  # 设置画笔的颜色
    pendown()  # 落下画笔,开始绘图
    speed(0)  # 设置画笔的速度,1-9依次越来越快,其他数字比9更快


def left_rotate(time, angle, length):
    # 绘制向左转的弧度,左转一定角度然后前进一段距离,重复多次就得到一个弧度
    for i in range(time):  # 重复次数
        left(angle)  # 左转的角度
        forward(length)  # 前进距离


def right_rotate(time, angle, length):
    # 绘制向右转的弧度,右转一定角度然后前进一段距离,重复多次就得到一个弧度
    for i in range(time):  # 重复次数
        right(angle)  # 右转的角度
        forward(length)  # 前进距离


def fill_color_patch(x, y, c='white'):
    # 填充颜色时会找上一个图形的介绍点,此函数重置结束点,避免填充效果不准
    set_start(x, y, 1, c=c)
    forward(1)


def draw_circle(radius, color, color2=''):
    # 绘制一个圆,radius是圆的半径,color是边框颜色,color2是填充颜色
    if color2 == '':
        color2 = color
    penup()
    setheading(towards(0, 0))
    right(90)
    pencolor(color)
    pendown()
    begin_fill()
    circle(radius)  # 画圆
    fillcolor(color2)
    end_fill()


def draw_football():
    # 足球
    # set_start(15, -157, w=1, c='black')
    # draw_circle(39, 'black', '#DCDCDC')
    fill_color_patch(39.34, -90.63)
    begin_fill()
    set_start(39.34, -90.63, w=2, c='black')
    setheading(124.2)
    left_rotate(20, 18, 12.2)
    goto(39.34, -90.63)
    fillcolor('#DCDCDC')
    end_fill()
    fill_color_patch(-25, -110)
    begin_fill()
    set_start(-25, -110, w=1, c='white')
    right_rotate(1, 160, 10)
    left_rotate(5, 20, 12)
    left_rotate(4, 18, 12)
    pencolor('black')
    left_rotate(1, 35, 12)
    left_rotate(7, 18, 12.1)
    goto(-25, -110)
    fillcolor('white')
    end_fill()
    fill_color_patch(-25, -108)
    begin_fill()
    set_start(-25, -108, w=1, c='black')
    right_rotate(1, 20, 4)
    right_rotate(2, 10, 3)
    left_rotate(1, 35, 5)
    left_rotate(1, 165, 5)
    right_rotate(2, 15, 3)
    goto(-25, -108)
    fillcolor('black')
    end_fill()
    fill_color_patch(-16, -101)
    begin_fill()
    set_start(-16, -101, w=1, c='black')
    right_rotate(1, 35, 8)
    right_rotate(1, 140, 4)
    left_rotate(2, 21, 2)
    left_rotate(2, 8, 4.5)
    right_rotate(1, 105, 8)
    right_rotate(1, 120, 3)
    left_rotate(3, 15, 4)
    goto(-16, -101)
    fillcolor('black')
    end_fill()
    fill_color_patch(-10, -93)
    begin_fill()
    set_start(-10, -93, w=1, c='black')
    left_rotate(1, 90, 4)
    right_rotate(1, 135, 5)
    right_rotate(2, 3, 7)
    right_rotate(1, 60, 3)
    right_rotate(1, 135, 5)
    left_rotate(3, 10, 4)
    goto(-10, -93)
    fillcolor('black')
    end_fill()
    fill_color_patch(6, -82)
    begin_fill()
    set_start(6, -82, w=1, c='black')
    right_rotate(1, 50, 4)
    right_rotate(1, 60, 6)
    right_rotate(2, 3, 7)
    right_rotate(1, 130, 4)
    right_rotate(1, 60, 5)
    left_rotate(3, 8, 4)
    goto(6, -82)
    fillcolor('black')
    end_fill()
    fill_color_patch(30, -88)
    begin_fill()
    set_start(30, -88, w=1, c='black')
    right_rotate(1, 130, 5)
    right_rotate(1, 15, 5)
    right_rotate(1, 150, 5)
    goto(30, -88)
    fillcolor('black')
    end_fill()
    fill_color_patch(25, -89)
    begin_fill()
    set_start(25, -89, w=1, c='black')
    right_rotate(1, 140, 8)
    right_rotate(1, 95, 4)
    left_rotate(2, 25, 6)
    right_rotate(1, 130, 8)
    right_rotate(1, 110, 3)
    left_rotate(3, 20, 4)
    goto(25, -89)
    fillcolor('black')
    end_fill()
    fill_color_patch(20, -106)
    begin_fill()
    set_start(20, -106, w=1, c='black')
    right_rotate(1, 180, 8)
    right_rotate(1, 120, 4)
    left_rotate(3, 18, 5.8)
    right_rotate(1, 120, 8)
    right_rotate(1, 110, 3)
    left_rotate(3, 14, 5)
    goto(20, -106)
    fillcolor('black')
    end_fill()
    fill_color_patch(-8, -117)
    begin_fill()
    set_start(-8, -117, w=1, c='black')
    right_rotate(1, 100, 8)
    right_rotate(1, 115, 4)
    left_rotate(2, 16, 5)
    left_rotate(1, 22, 6)
    right_rotate(1, 125, 8)
    right_rotate(1, 120, 3)
    left_rotate(1, 25, 4)
    left_rotate(3, 15, 4)
    goto(-8, -117)
    fillcolor('black')
    end_fill()
    fill_color_patch(-12, -137)
    begin_fill()
    set_start(-12, -137, w=1, c='black')
    right_rotate(1, 145, 8)
    right_rotate(1, 148, 4)
    left_rotate(2, 18, 3.2)
    right_rotate(1, 55, 7)
    right_rotate(1, 165, 3)
    left_rotate(3, 20, 3)
    goto(-12, -137)
    fillcolor('black')
    end_fill()
    fill_color_patch(-6, -144)
    begin_fill()
    set_start(-6, -144, w=1, c='black')
    right_rotate(1, 35, 6)
    right_rotate(1, 105, 4)
    left_rotate(3, 16, 5.5)
    right_rotate(1, 130, 5)
    right_rotate(1, 78, 3)
    left_rotate(3, 5, 4)
    goto(-6, -144)
    fillcolor('black')
    end_fill()
    fill_color_patch(23, -115)
    begin_fill()
    set_start(23, -115, w=1, c='black')
    right_rotate(1, 60, 8)
    right_rotate(1, 120, 4)
    left_rotate(3, 12, 5.3)
    right_rotate(1, 100, 8)
    right_rotate(1, 130, 3)
    left_rotate(3, 15, 5)
    goto(23, -115)
    fillcolor('black')
    end_fill()
    fill_color_patch(32, -133)
    begin_fill()
    set_start(32, -133, w=1, c='black')
    right_rotate(1, 140, 6)
    right_rotate(1, 110, 4)
    left_rotate(3, 8, 5)
    right_rotate(1, 80, 7)
    right_rotate(1, 140, 3)
    left_rotate(3, 14, 6)
    goto(32, -133)
    fillcolor('black')
    end_fill()
    fill_color_patch(39, -135)
    begin_fill()
    set_start(39, -135, w=1, c='black')
    right_rotate(1, 30, 7)
    right_rotate(1, 80, 3)
    left_rotate(3, 20, 2.2)
    right_rotate(1, 160, 5)
    right_rotate(1, 60, 3)
    left_rotate(2, 15, 3)
    goto(39, -135)
    fillcolor('black')
    end_fill()
    fill_color_patch(14, -153)
    begin_fill()
    set_start(14, -153, w=1, c='black')
    right_rotate(1, 90, 7)
    right_rotate(1, 130, 3.5)
    right_rotate(1, 60, 3)
    goto(14, -153)
    fillcolor('black')
    end_fill()


if __name__ == '__main__':
    title('世界杯吉祥物拉伊卜Laeeb(公众号:小斌哥ge)')
    wide = 600
    height = 500
    screensize(wide, height, '#FF0049')
    setup(wide+30, height+30, 100, 50)
    shape(name='turtle')
    time.sleep(2)
    # draw_body()
    # draw_head()
    # draw_mouth()
    # draw_eye()
    # draw_cap()
    # draw_hair()
    draw_football()
    # draw_clothes()
    set_start(1000, 1000, 1)
    done()

代码获取

代码有1000多行,可以用WX关注我,在后台回复关键字“世界杯”获取完整代码。

声明:转载、二创等使用本文代码,请注明出处。

预告:过年前一周左右会更新一个小兔子的绘图视频,敬请关注。期待你的一键三连。

相关阅读

用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!

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

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

相关文章

运用滤波反投影的方法对图像进行重建matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 直接由正弦图得到反投影图像,会存在严重的模糊,这是早期 CT 系统所存在的问题。傅立叶中心切片定理表明,投影的一维傅立叶变换是得到投影区域的二维傅…

360安全卫士弹窗广告怎么彻底关闭

如何关闭360广告弹窗?有时候我们在电脑上看一些视频或者整理一些文件时,经常莫名其妙会出现一些广告弹窗,即使是关了也还会出现,很是影响用户体验感,那么怎么彻底关闭呢?下面给大家介绍具体教程&#xff0c…

【单目3D目标检测】GUPNet论文精读与代码解析

文章目录PrefaceAbstractContributionsPipelineBackboneNeckHeadLossGUPIn PaperIn CodeHTLIn PaperIn CodeRefernecePreface Lu Y, Ma X, Yang L, et al. Geometry uncertainty projection network for monocular 3d object detection[C]. Proceedings of the IEEE/CVF Intern…

ActivitiListener

ActivitiListener目录概述需求:设计思路实现思路分析1.ActivitiListener2.Activity3.Gateway5.FieldExtensionIOSpecification参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip ha…

骨传导原理是什么?哪些骨传导耳机值得入手

​骨传导耳机是目前耳机市场比较流行耳机,深受年轻一族和运动达人的喜爱。但尽管这种产品受到很多人的青睐,相较传统耳机,大众对骨传导耳机的认识和程度并不高,也有很多小伙伴不知道骨传导耳机的原理是怎么发声的,骨传…

Vue子组件传自定义属性给父组件

我们知道组件之间是不能够之间进行通信的,都是相互独立的,你用不了我的状态和方法,我也用不了你的,那如何实现通信呢,可以间接实现; 实现父组件和子组件的通信: 子组件想用父组件的状态需要父…

Java并发之线程池

文章目录前言一、Java中线程池概览1.1 类图1.2 内部流程图二、源码探索2.1 构造参数2.2 线程池状态2.3 Worker 的添加和运行2.4 阻塞队列2.5 任务拒绝策略三、实际使用3.1 动态线程池3.2 拓展使用3.3 springboot 中线程池参考前言 在高并发的 Java 程序设计中,编写…

数字化安全生产平台 DPS 重磅发布

11 月 5 日,在 2022 杭州 云栖大会上,数字化安全生产平台 DPS 重磅发布,助力传统运维向 SRE 转型。 阿里巴巴资深技术专家 周洋 十四五规划下,各行各业全面加速数字化转型与升级。随着企业数字化业务规模变大,迭代速…

Dubbo服务远程调用的简介及使用教程

一、Dubbo的简介 Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。 致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。 官网:https://dubbo.apache.org/ SOA架构:(Service-Oriented Arch…

华为云RDS数据库测评:性能超出预期,双11优惠还在继续

一、前言 作为一名电商行业公司的员工,深刻体会到系统大压力、高并发下保证服务的正常使用是多么严峻的挑战。双11这段时间,因为激增的使用量让我们的数据库服务严重吃紧,压力特别的大,甚至还出现了交易漏单,脏数据等…

【Servlet】3:Servlet 的基本原理、Servlet对象的生命周期

目录 第五章 | 动态资源与Servlet | 章节概述 | Tomcat与Servlet的 原理、关系 Tomcat的基本构成​编辑 Server处理HTTP请求 Connector内部架构分析 Container内部架构分析 Tomcat的执行流程小结 | Servlet 概述、接口实现 Servlet的基本概述 实现Servlet接口并通过U…

LeetCode HOT 100 —— 10.正则表达式匹配

题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 思路 对于字符串…

11月24日国产蓝牙AOA高精度定位vs国外知名厂家的蓝牙aoa定位效果的展示

11月24日国产蓝牙AOA高精度定位vs国外知名厂家的蓝牙aoa定位效果的展示 11月24日国产蓝牙AOA高精度定位vs国外知名厂家的蓝牙aoa定位效果的展示

操作系统的基本概念

文章目录一、操作系统的概念1.什么是操作系统?2 计算机系统的构成3 系统软件的概念4 操作系统的主要作用二、操作系统目标和功能1. 目标1.1 有效性1.2 方便性1.3 可扩充性1.4 开放性2. 功能2.1 作为系统资源的管理者2.2 作为用户与计算机[硬件系统]之间的接口2.3 实…

Linus 文件处理(一)

目录 一、前言 二、低级文件访问 1、write 2、read 3、open 4、Initial Permissions (1)umask (2)close (3)ioctl (4)第一个 copy_system.c 程序 (5&#xff…

Apache ShardingSphere(一) 基本概念介绍

文章目录一 基本介绍1.1 概述1.2 ShardingSphere JDBC1.3 ShardingSphere Proxy1.4 ShardingSphere Sidecar1.5 数据库的扩展1.5.1 向上扩展1.5.2 横向扩展1.5.2.1 读写分离1.5.2.2 垂直切分1.5.2.3 水平切分1.6 分库与分表1.6.1 水平分库1.6.2 水平分表1.6.3 垂直分库1.6.4 垂…

[iOS]使用MonkeyDev完成Hook

一、确定目标 先定个小目标,使用七猫举个例,去移除小说阅读页底部广告和章节之间的广告。 二、HOOK 1. 创建MonkeyApp项目导入砸壳包 2. 使用Reveal工具确定“底部广告”和“章末广告”的视图名称 底部广告 View Controller: Class: QMReader.YYReade…

Strassen矩阵乘法问题(Java)

Strassen矩阵乘法问题(Java) 文章目录Strassen矩阵乘法问题(Java)1、前置介绍3、代码实现4、复杂度分析5、参考资料1、前置介绍 矩阵乘法是线性代数中最常见的问题之一 ,它在数值计算中有广泛的应用。 设A和B是2个nXn…

搭建灾情快速分析系统 | Bigemap助力防灾减灾重点工作

Bigemap国产基础软件凭借自身强大的新GIS引擎技术与完善的产品链,为相关部门提供了集"灾情采集-灾情监测-灾害快速评估-应急指挥"于一体的灾害防灾减灾解决方案,搭建了灾情快速分析系统,该系统成为相关部门应对灾情的重要支撑平台。…

虚拟号码认证如何开通?

近年来,经常会接到外卖、房产中介、信用贷款等电话,让顾客不胜其扰。现在电话标记功能使用越来越普遍,可以大概了解电话“来意”,同时也会让误标记、恶意标记很方便。对于开展业务或办公司或企业的人,更加不能让自己的…