百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

来来来,一起用Python绘制一幅端午安康图:粽子与龙舟

off999 2025-07-09 16:50 23 浏览 0 评论

一、绘制方法与流程

1. 整体流程图

2. 详细绘制流程

  1. 画布初始化:设置窗口大小、背景色和标题
  2. 立体粽子绘制: 绘制正面三角形(浅绿色) 绘制侧面三角形(深绿色)形成立体效果 添加粽叶纹理线条 绘制十字绑法的粽绳 添加表情(眼睛、嘴巴、腮红)
  3. 龙舟绘制: 绘制船身基本形状 添加船头/尾装饰 绘制多个船桨 添加龙眼细节
  4. 文字祝福: 设置文字样式和位置 添加波浪装饰线
  5. 显示结果:保持窗口显示

二、核心知识点讲解

1. Turtle基础方法

1.1 画笔控制

turtle.penup()       # 抬起画笔,移动时不绘制
turtle.pendown()     # 落下画笔,移动时绘制
turtle.pensize(width)# 设置画笔宽度
turtle.color(color)  # 设置画笔颜色和填充色

1.2 移动控制

turtle.forward(distance)  # 前进指定距离
turtle.backward(distance) # 后退指定距离
turtle.right(angle)       # 右转指定角度
turtle.left(angle)        # 左转指定角度
turtle.goto(x, y)         # 移动到指定坐标
turtle.setheading(angle)  # 设置当前朝向角度

1.3 图形绘制

turtle.begin_fill()  # 开始填充
turtle.end_fill()    # 结束填充
turtle.circle(radius, extent)  # 绘制圆弧
turtle.dot(size, color)  # 绘制圆点

2. 关键函数简介

2.1 draw_realistic_zongzi()

功能:绘制立体粽子
返回值:Turtle对象
内部实现

  1. 绘制正面的等边三角形
  2. 绘制侧面的三角形形成立体效果
  3. 添加粽叶纹理
  4. 绘制十字绑法的粽绳
  5. 添加表情细节

2.2 draw_leaf_lines()

函数原型

def draw_leaf_lines(start_x, start_y, angle, length, count)

参数说明

  • start_x, start_y: 线条起始坐标
  • angle: 线条起始角度
  • length: 第一条线条长度
  • count: 绘制线条数量

用途:绘制粽叶的平行纹理线

2.3 draw_dragon_boat()

功能:绘制传统龙舟
特点

  • 船身采用梯形设计
  • 船头/尾有红色装饰
  • 对称分布的船桨
  • 添加龙眼细节

三、完整项目代码

import turtle

def init_screen():
    """初始化画布"""
    screen = turtle.Screen()
    screen.title('端午安康 - 粽子与龙舟')
    screen.bgcolor('#f0f8ff')
    screen.setup(width=800, height=600)
    return screen

def draw_realistic_zongzi():
    """绘制立体粽子"""
    z = turtle.Turtle()
    z.speed(8)
    
    # 绘制粽子主体
    z.penup()
    z.goto(0, 120)
    z.setheading(-60)
    z.pendown()
    
    # 正面
    z.color('#7cb342', '#9ccc65')
    z.begin_fill()
    for _ in range(3):
        z.forward(120)
        z.right(120)
    z.end_fill()
    
    # 侧面
    z.penup()
    z.goto(0, 120)
    z.setheading(180)
    z.pendown()
    z.color('#689f38', '#8bc34a')
    z.begin_fill()
    z.forward(60)
    z.left(120)
    z.forward(120)
    z.left(60)
    z.forward(60)
    z.end_fill()
    
    # 粽叶纹理
    def draw_lines(x, y, angle, len, count):
        z.penup()
        z.goto(x, y)
        z.setheading(angle)
        for i in range(count):
            z.pendown()
            z.pensize(1)
            z.color('#558b2f')
            z.forward(len - i*4)
            z.penup()
            z.backward(len - i*4)
            z.right(90)
            z.forward(6)
            z.left(90)
    
    draw_lines(-25, 80, 60, 30, 4)
    draw_lines(0, 60, 60, 30, 4)
    draw_lines(25, 40, 60, 30, 4)
    draw_lines(-50, 80, 180, 30, 4)
    draw_lines(-50, 60, 180, 30, 4)
    
    # 粽绳
    z.pensize(3)
    z.color('#5d4037')
    z.penup()
    z.goto(-30, 40)
    z.setheading(0)
    z.pendown()
    z.circle(30, 180)
    
    z.penup()
    z.goto(0, 120)
    z.setheading(270)
    z.pendown()
    z.forward(80)
    z.left(90)
    z.forward(30)
    z.left(90)
    z.forward(80)
    
    # 表情
    z.penup()
    z.goto(-15, 70)
    z.dot(10, 'black')
    z.goto(15, 70)
    z.dot(10, 'black')
    z.goto(-12, 73)
    z.dot(4, 'white')
    z.goto(18, 73)
    z.dot(4, 'white')
    
    z.penup()
    z.goto(0, 50)
    z.setheading(-60)
    z.pensize(2)
    z.pendown()
    z.circle(15, 120)
    
    z.penup()
    z.goto(-25, 55)
    z.color('#ffcdd2')
    z.begin_fill()
    z.circle(5)
    z.end_fill()
    z.goto(25, 55)
    z.begin_fill()
    z.circle(5)
    z.end_fill()
    
    z.hideturtle()
    return z

def draw_dragon_boat():
    """绘制龙舟"""
    d = turtle.Turtle()
    d.speed(8)
    
    # 船身
    d.penup()
    d.goto(-150, -100)
    d.pendown()
    d.color('#8d6e63', '#a1887f')
    d.begin_fill()
    d.setheading(-30)
    d.forward(100)
    d.setheading(0)
    d.forward(200)
    d.setheading(30)
    d.forward(100)
    d.setheading(180)
    d.forward(300)
    d.end_fill()
    
    # 装饰
    for pos, angle in [ (150, 180), (-150, 0) ]:
        d.penup()
        d.goto(pos, -100)
        d.pendown()
        d.color('#f44336')
        d.begin_fill()
        d.setheading(90)
        d.forward(50)
        d.setheading(angle)
        d.forward(20)
        d.setheading(270)
        d.forward(50)
        d.end_fill()
    
    # 船桨
    d.color('#5d4037')
    for x in range(-120, 121, 60):
        d.penup()
        d.goto(x, -80)
        d.pendown()
        d.setheading(90)
        d.forward(80)
        d.setheading(0)
        d.forward(40)
        d.setheading(270)
        d.forward(80)
    
    # 龙眼
    d.penup()
    d.goto(130, -70)
    d.dot(15, 'white')
    d.dot(8, 'black')
    d.goto(130, -90)
    d.dot(15, 'white')
    d.dot(8, 'black')
    
    d.hideturtle()
    return d

def add_blessing():
    """添加祝福文字"""
    t = turtle.Turtle()
    t.hideturtle()
    t.penup()
    
    # 主文字
    t.goto(0, -180)
    t.color('#d32f2f')
    t.write("端午安康", align="center", font=("楷体", 40, "bold"))
    
    # 波浪线
    t.pensize(2)
    t.color('#4fc3f7')
    for y in [-210, -220]:
        t.penup()
        t.goto(-200, y)
        t.pendown()
        for _ in range(10):
            t.circle(10, 180)
            t.circle(-10, 180)
    
    return t

def main():
    """主程序"""
    screen = init_screen()
    zongzi = draw_realistic_zongzi()
    boat = draw_dragon_boat()
    text = add_blessing()
    turtle.done()

if __name__ == "__main__":
    main()

效果如下:

四、总结

1. 技术要点

  1. Turtle绘图基础
  2. 掌握了基本图形绘制方法
  3. 理解了坐标系和角度系统
  4. 学会了颜色填充技巧
  5. 结构化编程
  6. 使用函数封装不同绘图模块
  7. 合理设计函数参数和返回值
  8. 提高代码可读性和复用性
  9. 图形设计技巧
  10. 使用简单几何图形组合复杂图案
  11. 通过颜色深浅表现立体感
  12. 细节装饰增强画面丰富度

2. 学习收获

  1. 理解了计算机绘图的基本原理
  2. 掌握了Python Turtle库的核心功能
  3. 学会了将复杂图形分解为简单步骤的思维方式
  4. 提升了通过代码创作艺术图案的能力

3. 扩展建议

  1. 尝试添加更多端午节元素(如艾草、香囊)
  2. 实现动画效果(如龙舟划动)
  3. 增加交互功能(点击触发特效)
  4. 探索其他Python绘图库(如Pygame)

本项目讲解了Python Turtle绘图技术,既适合初学者学习基础,也为进阶绘图提供了良好示范。


持续更新Python编程学习日志与技巧,敬请关注!


#学习# #在头条记录我的2025# #编程# #python#


相关推荐

一般家庭宽带用多少兆为最佳

这个要根据实际情况来确定,一般情况下,家庭宽带有50兆、100兆及200兆。如果是三口之家,平时也就看看电视,或刷刷手机,50兆的就够了。如果人口多,面积为四室二厅的房子,同时有人看电视有人玩游戏,有...

电脑配置太高装不了win7(电脑配置太高装不了win7怎么办)

如果是这样,那就不要安装Win7了,安装Win10即可。原因如下:1、win10系统是一个大势所趋。新的事物,你必须要接触、要熟悉,虽然目前还可以暂时回避,但是几年后呢,win7必然会像xp一样退出历...

移动硬盘读取不出来(移动硬盘读取不出来了,怎么拿数据)

1、移动硬盘插入电脑,选择计算机,选择左侧“此电脑”,点击右击。2、选择“管理”点击,进入计算机管理;选择磁盘“磁盘管理”。3、如没有看到移动硬盘,可以选择右边的更多操作,重新扫描磁盘。4、如依然没有...

win7系统有32位的吗(win732位系统需要多大内存)

  win732位系统最低配置要求:  CPU:1GHz32位或者64位处理器;  显卡:集成显卡64MB以上;  内存:内存1GB及以上安装识别的最低内存是512M,小于512M会提示内存...

桌面图标怎么改(桌面图标怎么改成自己喜欢的图案)
  • 桌面图标怎么改(桌面图标怎么改成自己喜欢的图案)
  • 桌面图标怎么改(桌面图标怎么改成自己喜欢的图案)
  • 桌面图标怎么改(桌面图标怎么改成自己喜欢的图案)
  • 桌面图标怎么改(桌面图标怎么改成自己喜欢的图案)
如何将系统还原(如何将系统还原到以前版本)

你好!依次单击“开始”/“程序”/“附件”/“系统工具”/“系统还原”命令,在其后弹出的系统还原设置向导界面中,将“恢复我的计算机到一个较早的时间”项目选中,然后单击“下一步”按钮;在其后弹出的系统...

u盘格式化分配单元大小多少合适

1、如果只是存放歌曲类或者是文档等小文件,就可以把单个格设置的小一些,比如16K,如果是大容量的电影可以设置为128K,不过一般只需要设置为【默认配置大小】就可以了;  2、U盘存储文件就是按照这个分...

修改自家wifi密码管理员密码

修改WiFi密码和管理员密码有两种方式:通过路由器管理页面和通过手机APP。1.通过路由器管理页面修改密码:步骤1:连接路由器,打开浏览器输入路由器的IP地址(一般为192.168.1....

超级硬盘数据恢复软件破解(超级硬盘数据恢复软件7.0)

这个慢很正常。因为硬盘恢复数据之前要对整个分区扫描一次,找到文件后,恢复的时候又要扫描一次。如果分区的容易很大,扫描会很耗时的。修复工具软件版本:嗨格式数据恢复大师2.8.1433.405,佳...

win11如何从edge恢复到ie(edge怎么变回ie)

如果您使用的是Windows10操作系统,在Windows的默认浏览器中使用Edge时,系统将默认将许多链接打开到Edge浏览器。如果您想要改回IE浏览器打开链接,按照以下步骤操作:1.打开IE浏...

uefi引导修复怎么用(uefi引导修复没反应)

biosuefi引导修复工具使用方法1、首先,在电脑关机状态下将pe启动盘插在电脑上,并在开机的时候进入pe系统,然后选择第一项回车进入:2、然后,进入到pe系统桌面之后,双击桌面上的分区工具:3、进...

360怎么升级win7系统(360如何升级win10)

像这种情况用以下介绍的方法和步骤就可以解决:1、打开电脑桌面找到“360安全卫士”软件,并打开;2、找到“360安全卫士”右下角工具拓展工具箭头;3、点击进入,选择“全部工具”;4、在全部工具页...

电脑分辨率怎么设置(电脑分辨率怎么调)

操作步骤/方法【Windows系统】END【Mac系统】第1步,选择系统偏好设置在电脑桌面,点击苹果图标并选择系统偏好设置。在电脑桌面,点击苹果图标并选择系统偏好设置。第2步,点击显示器在系统偏好设置...

win7输入法切换不了(win7输入法切换没反应)

输入法无法切换解决方法:   1、点击屏幕左下角的“开始图标”并在弹出对话框中选择“控制面板”选项并打开;  2、进入控制面板页面后将查看方式...

笔记本win10怎么改win7系统(笔记本win10改win7bios设置)

请注意,将Win10系统改为Win7系统并不是一个可行的或推荐的操作。在执行此操作之前,请确保已经获得必要的权限和授权,以及了解所涉及的风险和可能的问题。如果仍然想要执行此操作,以下是一些步骤...

取消回复欢迎 发表评论: