使用turtle绘制疫情加油图案

turtle这个库被介绍为一个最常用的用来给孩子们介绍编程知识的方法库,其主要是用于程序设计入门,是标准库之一,官方文档如下,利用turtle可以制作很多复杂的绘图,本文简单绘制疫情期间为武汉加油的图案。

导入库文件
import turtle
import math
import time
画心形圆弧

利用循环转动微小角度形成弧形。

def hart_arc():
    '''画心形圆弧'''
    for i in range(200):
        turtle.right(1)
        turtle.forward(3)
将移动画笔封装成函数
def move_pen_position(x,y):
    '''移动画笔位置'''
    turtle.hideturtle() #隐藏画笔
    turtle.up() #提笔
    turtle.goto(x,y) #移动画笔到指定起始坐标(窗口中心为0,0)
    turtle.down() #下笔
    turtle.showturtle() #显示画笔
绘制爱心主体部分
def draw_main():
    '''绘制爱心主体部分    '''
    # 初始化
    turtle.setup(width=1200, height=750)  # 画布大小
    turtle.color('pink', 'pink')  # 画笔颜色
    turtle.pensize(5)  # 画笔粗细
    turtle.speed(1)  # 画笔速度

    # 初始化画笔起始坐标
    move_pen_position(x=0, y=-270)  # 移动画笔位置
    turtle.left(140)  # 向左旋转140度
    turtle.begin_fill()  # 标记背景填充位置
    # 画心形直线( 左下方 )
    turtle.forward(336)  # 向前移动画笔,长度为224

    # 画爱心圆弧
    turtle.speed(0)  # 圆弧速度绘制过慢,此时加快速度
    hart_arc()  # 左侧圆弧
    turtle.left(120)  # 调整画笔角度
    hart_arc()  # 右侧圆弧

    # 画心形直线( 右下方 )
    turtle.speed(1)  # 画笔速度
    turtle.forward(336)
    time.sleep(0.8)
    turtle.end_fill()  # 标记背景填充结束位置
    # 在心形中写上表白话语
    move_pen_position(0, 0)  # 表白语位置
    turtle.hideturtle()  # 隐藏画笔
    turtle.color('#CD5C5C', 'black')  # 字体颜色
    time.sleep(0.5)
    # font:设定字体、尺寸(电脑下存在的字体都可设置) align:中心对齐
    turtle.write(love, font=('times new roman', 30, 'bold'), align="center")
将绘制正n角形封装成函数
def draw_n_angle(turtle, size=50, num=5, color=None):
    ''' 绘制正n角形
    args:
        turtle: turtle对象实例
        size: int类型,正多角形的边长
        n: int类型,是几角形
        color: str, 图形颜色,默认不填色
    '''
    if color:
        turtle.begin_fill()
        turtle.fillcolor(color)
    for i in range(num):
        turtle.forward(size)
        turtle.left(360.0 / num)
        turtle.forward(size)
        turtle.right(2 * 360.0 / num)
    if color:
        turtle.end_fill()
将绘制国旗上的五角星封装成函数

由于国旗上五角星的位置变化,可根据外接圆确定五角星的位置。

def draw_5_angle(turtle=None, start_pos=(0, 0), end_pos=(0, 10), radius=120, color=None):
    ''' 根据起始位置、结束位置和外接圆半径画五角星
    args:
        turtle: turtle对象实例
        start_pos: int的二元tuple,要画的五角星的外接圆圆心
        end_pos: int的二元tuple,圆心指向的位置坐标点
        radius: 五角星外接圆半径
        color: str, 图形颜色,默认不填色
    '''
    turtle = turtle or turtle.Turtle()
    size = radius * math.sin(math.pi / 5) / math.sin(math.pi * 3 / 10)
    angle = math.degrees(math.atan2(end_pos[1] - start_pos[1], end_pos[0] - start_pos[0]))
    print(angle)
    turtle.penup()
    turtle.goto(start_pos)
    turtle.setheading(0)
    turtle.left(angle)
    turtle.fd(radius)
    turtle.pendown()
    turtle.right(math.degrees(math.pi * 9 / 10))
    draw_n_angle(turtle, size, 5, color)
绘制国旗

国旗与爱心的相对大小和位置可以调整参数large,large1

def draw_flag():
    large1 = 1.18  # 国旗面放大倍数
    large = 1  # 五角星放大倍数与位置变换
    # 绘制五星红旗,默认规格为30*20
    width, height = 300*large1, 200*large1
    # 初始化屏幕和海龟
    # window = turtle.Screen()
    # turtle = turtle.Turtle()
    #turtle.reset()# 恢复所有设置且清除之前图案
    turtle.pensize(1)
    turtle.color("red")
    degree = 0
    turtle.setheading(degree)#海龟朝向,degree代表角度
    turtle.hideturtle()
    turtle.speed(10)
    # 画红旗
    turtle.penup()
    turtle.goto(-300*large1 / 2, 200*large1 / 2) #重新定位画笔起点
    turtle.pendown()
    turtle.begin_fill()
    turtle.fillcolor('red')
    turtle.fd(width)
    turtle.right(90)
    turtle.fd(height)
    turtle.right(90)
    turtle.fd(width)
    turtle.right(90)
    turtle.fd(height)
    turtle.right(90)
    turtle.end_fill()
    # 画大星星
    draw_5_angle(turtle, start_pos=(-100*large, 50*large), end_pos=(-100*large, 80*large), radius=30, color='yellow')
    # 画四个小星星
    stars_start_pos = [(-5*large, 8*large), (-3*large, 6*large), (-3*large, 3*large), (-5*large, 1*large)]
    for pos in stars_start_pos:
        draw_5_angle(turtle, start_pos=(pos[0] * 10*large, pos[1] * 10*large), end_pos=(-10 * 10*large*large, 5 * 10*large*large), radius=10,
                     color='yellow')
文末署上自己的签名

注意位置的调整。

def draw_signature():
    '''签写署名'''
    if signature != '':
        turtle.color('red', 'blue')
        time.sleep(0.2)
        move_pen_position(270, -270)
        turtle.hideturtle()  # 隐藏画笔
        turtle.write(signature, font=('Microsoft YaHei', 20), align="center")
打印应援文字
def draw_word(words,positionx=500,alignstyle="right"):
    '''打印加油文字'''
    turtle.color('red', 'blue')
    time.sleep(0.2)
    move_pen_position(positionx, 0)
    turtle.hideturtle()  # 隐藏画笔
    turtle.write(words, font=('KaiTi', 90), align=alignstyle)
调用
if __name__ == "__main__":
    love = "\n岂曰无衣,与子同袍"  # 爱心填充内容
    signature = "-----不吃辣的阿小豪"  # 默认署名
    draw_main()   #首先绘制心形框架
    time.sleep(2)
    draw_flag()   #绘制国旗
    time.sleep(0.5)
    draw_word("中国",-500,"left") #打印加油文字
    draw_word("加油")
    time.sleep(0.5)
    draw_signature() #签署名
    time.sleep(1)
    turtle.reset()
    turtle.exitonclick() # 点击关闭窗口

关于Python中if name == ‘main’:的作用和原理,下面推荐一篇通俗易懂的博客供参考:if name == ‘main

下面附上完整代码供参考,同时git上有已经绘制好的gif图供查阅:git链接

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 你好!感谢你使用 CSDN 开发的 C 知道。我可以回答一些关于使用 turtle 绘制图形时如何填充颜色的问题。 要在 turtle 绘图中填充颜色,可以使用 fill() 函数和 begin_fill() 函数。使用 begin_fill() 函数开始填充,然后使用 fill() 函数填充形状。 下面是一个示例代码,展示如何使用 turtle 绘图填充颜色: ```python import turtle # 创建画布和画笔 wn = turtle.Screen() wn.title("Turtle Demo") pen = turtle.Turtle() # 设置填充颜色和边框颜色 pen.color("red", "yellow") # 开始填充 pen.begin_fill() # 绘制形状 pen.forward(100) pen.left(120) pen.forward(100) pen.left(120) pen.forward(100) # 结束填充 pen.end_fill() # 隐藏画笔 pen.hideturtle() # 关闭画布 wn.mainloop() ``` 在这个例子中,我们使用 color() 函数设置了填充颜色和边框颜色。然后,我们使用 begin_fill() 函数开始填充,并使用 end_fill() 函数结束填充。在填充之间,我们绘制了一个三角形。 希望这可以回答你的问题。如果你有其他问题,请随时问我。 ### 回答2: 使用turtle绘制图案时,可以使用`begin_fill()`和`end_fill()`方法来填充颜色。 首先,调用`begin_fill()`方法开始填充颜色,然后在绘制图案后调用`end_fill()`方法结束填充。这两个方法需要成对出现,否则无法正确填充颜色。 例如,我们可以绘制一个正方形并填充红色作为例子: ```python import turtle # 创建一个 Turtle 实例 t = turtle.Turtle() # 填充颜色开始 t.begin_fill() # 绘制正方形 for _ in range(4): t.forward(100) t.right(90) # 填充颜色结束 t.end_fill() # 隐藏海龟箭头 t.hideturtle() # 点击窗口可关闭 turtle.done() ``` 运行上述代码,将会绘制一个边长为100的红色正方形,并填充红色。 在实际应用中,我们可以根据需要绘制各种图案,并使用不同的填充颜色来增加图案的美感。需要注意的是,为了能够正确填充颜色,图案需要是封闭的(例如正方形、圆形等),不然填充的颜色将无法涂满整个图案。 ### 回答3: 使用turtle绘制图案并填充颜色可以通过以下步骤实现: 1. 导入turtle模块:首先需要导入turtle模块,可以使用以下代码导入: import turtle 2. 设置填充颜色:在开始绘制图案之前,可以使用turtle.fillcolor(颜色)函数设置填充颜色。颜色可以使用颜色名称(如'red'、'blue')或RGB值(如(255, 0, 0)表示红色)来指定。 3. 开始填充:在绘制图案之前,使用turtle.begin_fill()函数开始填充。 4. 绘制图案使用turtle绘制图案,可以使用turtle的各种绘制函数来创建你想要的图案。 5. 结束填充:图案绘制完成后,使用turtle.end_fill()函数结束填充。 6. 显示图案:最后使用turtle.done()函数来显示绘制完成的图案。 下面是一个绘制正方形并填充颜色的示例代码: ```python import turtle turtle.fillcolor('orange') turtle.begin_fill() for _ in range(4): turtle.forward(100) turtle.right(90) turtle.end_fill() turtle.done() ``` 以上代码首先导入了turtle模块,然后使用turtle.fillcolor('orange')设置填充颜色为橙色,接着使用turtle.begin_fill()函数开始填充,使用循环绘制了一个正方形,然后使用turtle.end_fill()结束填充,最后使用turtle.done()显示完成的图案。通过调整填充颜色和绘制图案的代码,可以创建出各种不同的图案并填充颜色。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值