Python 跳动的爱心:用 `turtle` 绘制动态爱心图案

在这篇教程中,我们将使用 Python 中的 turtle 库来绘制一个动态跳动的爱心图案。turtle 是 Python 内置的一个绘图模块,非常适合用来制作图形和动画。

通过设置循环和控制图形的大小、位置,我们将创建一个动态的爱心效果,仿佛它在跳动。

环境准备

Turtle 库是 Python 内置的,因此无需安装任何额外的库。只要你已经安装了 Python,就可以直接运行。


1. 绘制静态爱心

在开始制作动态效果之前,首先了解如何绘制一个简单的爱心图案。我们将使用 turtle 库来绘制爱心。

1.1 绘制静态爱心的基础代码

import turtle

# 设置窗口
screen = turtle.Screen()
screen.bgcolor("white")

# 创建画笔
pen = turtle.Turtle()
pen.shape("turtle")
pen.color("red")
pen.speed(3)

# 绘制爱心的函数
def draw_heart():
    pen.begin_fill()
    pen.left(50)
    pen.forward(133)
    pen.circle(50, 200)
    pen.right(140)
    pen.circle(50, 200)
    pen.forward(133)
    pen.end_fill()

# 绘制爱心
draw_heart()

# 结束绘制
turtle.done()

在这段代码中,我们使用了 turtle 库来绘制爱心图案。主要的图形是由两条弯曲的圆弧和两条直线组成,形成一个完美的爱心。

1.2 代码解析

  • pen.circle(50, 200):这条命令绘制一个半径为 50、弧度为 200 的圆弧。
  • pen.forward(133):绘制直线,长度为 133。
  • pen.begin_fill()pen.end_fill():这两个命令用于填充爱心的红色。

2. 制作跳动的爱心

为了让爱心看起来像是跳动的效果,我们需要通过改变爱心的大小来实现这一目标。使用 turtle 中的 pen.shapesize() 可以调整图形的大小。

2.1 让爱心跳动的动态效果

import turtle
import math

# 设置窗口
screen = turtle.Screen()
screen.bgcolor("white")

# 创建画笔
pen = turtle.Turtle()
pen.shape("turtle")
pen.color("red")
pen.speed(10)

# 设置初始大小
size = 1

# 绘制爱心的函数
def draw_heart(size):
    pen.clear()  # 清除之前绘制的内容
    pen.penup()
    pen.goto(0, -100)  # 重置位置
    pen.pendown()
    
    pen.begin_fill()
    pen.left(50)
    pen.forward(133 * size)
    pen.circle(50 * size, 200)
    pen.right(140)
    pen.circle(50 * size, 200)
    pen.forward(133 * size)
    pen.end_fill()

# 跳动效果
def pulse_heart():
    global size
    while True:
        for i in range(20):
            size = 1 + math.sin(math.radians(i * 18)) * 0.1  # 控制大小的变化
            draw_heart(size)  # 绘制当前大小的爱心
            turtle.update()  # 更新屏幕
            turtle.delay(50)  # 延迟,控制动画速度

# 开启绘图窗口
turtle.tracer(0)  # 关闭自动更新屏幕

# 开始跳动的爱心
pulse_heart()

# 结束绘制
turtle.done()

2.2 代码解析

  • 动态变化的 size

    • 我们使用 math.sin() 函数来计算一个逐渐变化的值,使得爱心的大小在 1 和 1.1 之间不断变化,从而实现跳动的效果。
    • math.sin(math.radians(i * 18)) * 0.1 产生一个平滑的周期性变化,每次循环通过 size 值的变化来绘制不同大小的爱心。
  • pen.clear()

    • 每次更新之前清除上一个爱心图形,使得动画更流畅。
  • turtle.tracer(0)turtle.update()

    • 通过 turtle.tracer(0) 关闭自动更新屏幕,并在每次绘制后通过 turtle.update() 手动更新屏幕,以达到更流畅的动画效果。
  • turtle.delay(50)

    • 设置一个延迟,以控制动画的速度,数值越小,动画速度越快。

3. 完整的跳动爱心代码

以下是完整的跳动爱心代码:

import turtle
import math

# 设置窗口
screen = turtle.Screen()
screen.bgcolor("white")

# 创建画笔
pen = turtle.Turtle()
pen.shape("turtle")
pen.color("red")
pen.speed(10)

# 设置初始大小
size = 1

# 绘制爱心的函数
def draw_heart(size):
    pen.clear()  # 清除之前绘制的内容
    pen.penup()
    pen.goto(0, -100)  # 重置位置
    pen.pendown()
    
    pen.begin_fill()
    pen.left(50)
    pen.forward(133 * size)
    pen.circle(50 * size, 200)
    pen.right(140)
    pen.circle(50 * size, 200)
    pen.forward(133 * size)
    pen.end_fill()

# 跳动效果
def pulse_heart():
    global size
    while True:
        for i in range(20):
            size = 1 + math.sin(math.radians(i * 18)) * 0.1  # 控制大小的变化
            draw_heart(size)  # 绘制当前大小的爱心
            turtle.update()  # 更新屏幕
            turtle.delay(50)  # 延迟,控制动画速度

# 开启绘图窗口
turtle.tracer(0)  # 关闭自动更新屏幕

# 开始跳动的爱心
pulse_heart()

# 结束绘制
turtle.done()

4. 提示和扩展

  1. 自定义跳动速度:通过调整 turtle.delay() 的参数,你可以控制跳动的速度,参数越小跳动越快。
  2. 不同颜色的爱心:通过修改 pen.color("red") 可以改变爱心的颜色,例如 pen.color("pink")
  3. 停止跳动:可以加入条件判断,按下特定键停止跳动动画。可以使用 turtle.onkey() 设置键盘事件。

总结

通过 turtle 库,我们轻松实现了一个动态跳动的爱心效果。通过调整图形大小和使用三角函数控制大小的变化,我们能够创建一个看起来像在跳动的爱心图案。希望这个简单的动画示例能帮助你掌握 Python 绘图库的基本用法,同时也能激发你进行更复杂动画创作的灵感!