利用Python海龟绘图画一个世界杯的足球
花有重开日 人无再少年
四年一次的世界杯快要结束,为了纪念此次世界杯,特意用Python画了一个足球。
1.设计思路以及实现效果
世界杯足球实现思路:
- 首先使用海龟画一个圆形作为足球的外边框。
- 然后在足球框的中心位置,绘制一个五边形,确定位置坐标,通过fd()方法绘制一条线,并通过seth()方式逆时针旋转得到一个五边形,最后填充成黑色。
- 画好一个五边形后,在圆形的顶部、左上角、左下角、右上角、右下角统统画一个五边形,这五个位置的五边形要比中心五边形要小一点,因此合理控制fd()方法的实参。
- 五边形全部画好后,接下来就很简单了,也是去控制画笔的位置,以及指针的角度,然后通过
turtle.forward(130)
方法去绘制一条线,将五边形都连接在一起。 - 最终就实现了足球的效果。
画完的足球效果如下:
2.完整代码如下
import turtle
turtle.pensize(10)
turtle.speed(0)
"""足球外框"""
turtle.penup()
# 移动画笔的坐标
turtle.goto(0, -200)
turtle.pendown()
turtle.color('black')
turtle.circle(200)
# 中心五边形
turtle.penup()
turtle.goto(-40, -67)
turtle.pendown()
d = 0
turtle.begin_fill()
for i in range(5):
turtle.fd(80)
# 逆时针旋转,呈现出正立的五边形
d += 72
turtle.seth(d)
turtle.end_fill()
# 顶部五边形
turtle.penup()
turtle.goto(-23, 198)
turtle.pendown()
d = 0
turtle.begin_fill()
for i in range(5):
turtle.fd(40)
# 逆时针旋转,呈现出倒立的五边形
d -= 72
turtle.seth(d)
turtle.end_fill()
# 左上角五边形
turtle.penup()
turtle.goto(-180, 66)
turtle.pendown()
d = 0
turtle.begin_fill()
for i in range(5):
turtle.fd(40)
# 逆时针旋转,呈现出倒立的五边形
d -= 72
turtle.seth(d)
turtle.end_fill()
# 右上角五边形
turtle.penup()
turtle.goto(140, 66)
turtle.pendown()
d = 0
turtle.begin_fill()
for i in range(5):
turtle.fd(40)
# 逆时针旋转,呈现出倒立的五边形
d -= 72
turtle.seth(d)
turtle.end_fill()
# 左下角五边形
turtle.penup()
turtle.goto(-122, -110)
turtle.pendown()
d = 0
turtle.begin_fill()
for i in range(5):
turtle.fd(40)
# 逆时针旋转,呈现出倒立的五边形
d -= 72
turtle.seth(d)
turtle.end_fill()
# 右下角五边形
turtle.penup()
turtle.goto(73, -110)
turtle.pendown()
d = 0
turtle.begin_fill()
for i in range(5):
turtle.fd(40)
# 逆时针旋转,呈现出倒立的五边形
d -= 72
turtle.seth(d)
turtle.end_fill()
# 五边形连线的宽度为5
turtle.pensize(5)
# 左上角与顶部的连接线
turtle.penup()
turtle.goto(-132, 68)
turtle.left(45)
turtle.pendown()
turtle.forward(130)
# 右上角与顶部的连接线
turtle.penup()
turtle.goto(140, 66)
turtle.left(95)
turtle.pendown()
turtle.forward(138)
# 左下角与左上角的连接线
turtle.penup()
turtle.goto(-122, -110)
turtle.right(30)
turtle.pendown()
turtle.forward(130)
# 右下角与右上角的连接线
turtle.penup()
turtle.goto(120, -110)
turtle.right(39)
turtle.pendown()
turtle.forward(130)
# 左下角与右下角的连接线
turtle.penup()
turtle.goto(-65, -153)
turtle.right(72)
turtle.pendown()
turtle.forward(130)
# 中心与顶部的连接线
turtle.penup()
turtle.goto(1, 167)
turtle.right(88)
turtle.pendown()
turtle.forward(130)
# 中心与左上角的连接线
turtle.penup()
turtle.goto(-20, 17)
turtle.right(98)
turtle.pendown()
turtle.forward(130)
# 中心与左上角的连接线
turtle.penup()
turtle.goto(20, 17)
turtle.right(170)
turtle.pendown()
turtle.forward(130)
# 中心与左下角的连接线
turtle.penup()
turtle.goto(-25, -20)
turtle.right(122)
turtle.pendown()
turtle.forward(135)
# 中心与右下角的连接线
turtle.penup()
turtle.goto(95, -180)
turtle.right(123)
turtle.pendown()
turtle.forward(135)
turtle.color('blue')
# 文字
turtle.penup()
turtle.goto(-170, 250)
turtle.pendown()
turtle.write("2022卡塔尔世界杯!", font=("幼圆", 32))
# 文字
turtle.penup()
turtle.goto(-170, -270)
turtle.pendown()
turtle.write("足球(jiangxl~制作)", font=("幼圆", 32))
turtle.hideturtle()
turtle.done()