当前位置: 首页 > news >正文

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

用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画一只老虎,祝您新年虎虎生威,大吉大利!

相关文章:

  • 大规模异构图召回在美团到店推荐广告的应用
  • 在大厂工作是这样的
  • [附源码]SSM计算机毕业设计民宿客栈管理系统JAVA
  • FPGA片内RAM读写测试实验+逻辑分析仪ila
  • 【数据结构】七种排序方法,一篇文章掌握
  • 【web前端开发】HTML知识点超详细总结
  • C++ 语言学习 day11 复习(3)
  • 网络编程基础知识
  • 【用户画像】应用场景
  • 表白墙(前端+后端+数据库)
  • AI 预测世界杯比赛结果,惊掉下巴
  • 一个完整的项目流程
  • 嵌入式学习笔记(1)基本知识、C语言常用关键字、OLED
  • 用Python采集球员信息,成功预测到了球赛胜负?
  • OpenCV图像处理——(实战)答题卡识别试卷
  • [NodeJS] 关于Buffer
  • CSS居中完全指南——构建CSS居中决策树
  • golang中接口赋值与方法集
  • k8s如何管理Pod
  • React Transition Group -- Transition 组件
  • Sequelize 中文文档 v4 - Getting started - 入门
  • windows-nginx-https-本地配置
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 初识 webpack
  • 精彩代码 vue.js
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 力扣(LeetCode)56
  • 扑朔迷离的属性和特性【彻底弄清】
  • 说说动画卡顿的解决方案
  • 系统认识JavaScript正则表达式
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #NOIP 2014#Day.2 T3 解方程
  • (arch)linux 转换文件编码格式
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (转载)OpenStack Hacker养成指南
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET 的程序集加载上下文
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET单元测试
  • .sh 的运行
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @RunWith注解作用
  • [@Controller]4 详解@ModelAttribute
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [Angular] 笔记 21:@ViewChild
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C语言]——C语言常见概念(1)
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽
  • [HNCTF 2022 WEEK2]easy_include 文件包含遇上nginx