首页 > 编程语言 >用Python代码画世界杯吉祥物拉伊卜(附代码)

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

时间:2022-11-26 10:37:08浏览次数:41  
标签:rotate 画笔 Python 代码 吉祥物 right black left fill


用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关注我,在后台回复关键字“世界杯”获取完整代码。

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

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

标签:rotate,画笔,Python,代码,吉祥物,right,black,left,fill
From: https://blog.51cto.com/u_15792201/5888719

相关文章

  • Grasp Detection论文、代码汇总
    文章目录​​2022​​​​End-to-endTrainableDeepNeuralNetworkforRoboticGraspDetectionandSemanticSegmentationfromRGB​​​​2019​​​​AntipodalRob......
  • Knowledge Transfer论文、代码汇总
    文章目录​​2018​​​​LearningDeepRepresentationswithProbabilisticKnowledgeTransfer(ECCV)​​​​2019​​​​LIKEWHATYOULIKE:KNOWLEDGEDISTILLVIAN......
  • 【775】Python实现下载百分比,进度条
    参考:Python:输出覆盖,输出进度百分比的实现进度百分比的实现事实上是在无限循环中通过输出重复覆盖实现的,如上代码中#这里用"\r"使每次输出左对齐,覆盖上一次输出结果prin......
  • 基于Sklearn机器学习代码实战
    LinearRegression线性回归入门数据生成为了直观地看到算法的思路,我们先生成一些二维数据来直观展现importnumpyasnpimportmatplotlib.pyplotaspltdeftrue_f......
  • linux云服务器CentOS7.6系统中布署Python+mysql项目
    记录下在LinuxCentOS7.6系统中如何布署python项目的步骤1,登录到服务器(sshroot@127.***.*.*)2,修改CentOS中的selinux安全服务程序,它在/ect/selinux/config目录下,修改它......
  • 小程序的后端代码语法
    先启动云开发,在数据库中添加json文件来导入数据。将数据权限建议改为:所用用户可读,仅创建者可读写小程序的数据库类似于mongodb后端也是基于js的,你需要了解箭头函数......
  • python中的字典和集合
    1.字典#基础数据类型#boolintfloatstrlisttupledictset#listdictset可变数据类型#boolintfloatstrtuple不可变数据类型#1.字典dict#dict_d......
  • UG二次开发NXOpen-Python(十二) 通过命令行运行程序
    因为各种原因,有时候,我们不希望在UG程序界面通过人机交互来执行二次开发程序,我们希望可以在后台运行程序,例如我们自己做了一个UI界面,想通过点按钮生成一些部件文件。比如说......
  • python grpc
    pythonrpc进入examples/python/route_guide,运行:pipinstallgrpcio-toolspython-mgrpc_tools.protoc-I../../protos--python_out=.--pyi_out=.--grpc_python_out......
  • PSO 算法的变体python实现
    上演化计算课的时候老师让我们实现EOPSO算法(一种精英反向的粒子群优化算法),下面是他的算法步骤: 首先我们需要知道一些基础知识:(1)基础PSO算法 (2)精英反向解 impo......