一、Python 花瓣爱心完整代码(可直接复制运行)
python
import turtle
import math
# 设置画布与画笔
screen = turtle.Screen()
screen.title("Python 花瓣爱心特效")
screen.bgcolor("#f9f9f9")
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)
pen.color('red', 'pink')
# 定义爱心曲线函数
def heart_func(t):
x = 16 * math.sin(t) ** 3
y = 13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t)
return x, y
# 绘制花瓣爱心
pen.begin_fill()
for i in range(600):
t = math.radians(i)
x, y = heart_func(t)
pen.goto(x * 10, y * 10)
pen.end_fill()
# 绘制中心文字
pen.penup()
pen.goto(0, -50)
pen.color("#c70039")
pen.write("I ❤️ Python", font=("Microsoft YaHei", 18, "bold"), align="center")
# 保持窗口
turtle.done()
运行效果:
- 画出一个标准数学爱心
- 填充粉色,边框红色
- 中间显示文字 I ❤️ Python
- 窗口不会自动关闭
二、整体项目结构与实现思路(详细过程)
1. 需求分析
我们要实现的是:
1. 使用 Python 绘制数学公式生成的爱心
2. 爱心形状饱满、对称、美观
3. 带填充色、边框色
4. 居中显示文字
5. 窗口保持不退出
实现工具选择:
- turtle 库:Python 内置绘图库,简单直观,适合图形绘制
- math 库:提供三角函数,用于计算爱心坐标
- 不依赖第三方库,无需安装,直接运行
2. 实现步骤总览
1. 导入库
2. 创建画布与画笔
3. 定义爱心数学公式
4. 循环计算坐标并连线
5. 填充颜色
6. 添加文字
7. 保持窗口显示
下面逐行、逐模块详细拆解。
三、逐行代码深度分析(超详细)
模块 1:导入依赖库
python
import turtle
import math
作用说明
- turtle :Python 内置的绘图模块,像拿着一支笔在屏幕上画线
- math :提供数学函数,如 sin 、 cos 、 pow 、 radians 等
- 这两个库都是 Python 自带,不需要 pip install
为什么必须导入?
爱心是参数方程曲线,必须用三角函数计算坐标,所以必须 math 。
绘图必须用绘图库,turtle 最简单适合新手。
模块 2:初始化画布与画笔
python
screen = turtle.Screen()
screen.title("Python 花瓣爱心特效")
screen.bgcolor("#f9f9f9")
详细解释
1. turtle.Screen()
创建一个绘图窗口对象,所有画面都在这个窗口里展示。
2. screen.title(...)
设置窗口标题栏文字,美观友好。
3. screen.bgcolor("#f9f9f9")
设置背景色为浅灰色, #f9f9f9 是十六进制颜色码。
也可以写英文: 'white' 、 'lightblue' 。
python
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)
pen.color('red', 'pink')
详细解释
1. pen = turtle.Turtle()
创建一支画笔,所有绘制动作都由这支笔完成。
2. pen.hideturtle()
隐藏画笔箭头,让画面更干净。
3. pen.speed(0)
设置绘画速度:
- 1~10 越来越快
- 0 是最快模式,瞬间画完
4. pen.color('red', 'pink')
第一个颜色 red :边框颜色
第二个颜色 pink :填充颜色
模块 3:爱心数学公式(核心)
python
def heart_func(t):
x = 16 * math.sin(t) ** 3
y = 13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t)
return x, y
这是整个爱心的灵魂,是经典的爱心参数方程。
数学原理详细说明
爱心不是圆,也不是椭圆,而是一条特殊参数曲线。
参数 t 相当于角度,从 0 到 2π 一圈。
x 坐标公式
plaintext
x = 16·sin³(t)
- sin(t) 在 [-1,1] 之间
- 三次方让形状更“向内收缩”,形成爱心上半部分凹陷
y 坐标公式
plaintext
y = 13cos(t) − 5cos(2t) − 2cos(3t) − cos(4t)
- 多层余弦叠加
- 构造出爱心底部尖、两侧饱满、上方凹陷的形状
为什么这个公式能画爱心?
- 高次谐波(2t、3t、4t)让曲线产生向内收缩的轮廓
- 系数经过精心调整,形成对称、美观的爱心
- 这是计算机图形学中最经典的爱心公式
模块 4:循环绘制爱心轮廓
python
pen.begin_fill()
for i in range(600):
t = math.radians(i)
x, y = heart_func(t)
pen.goto(x * 10, y * 10)
pen.end_fill()
逐句拆解
1. pen.begin_fill()
开始填充区域,之后画的闭合图形会被填充颜色。
2. for i in range(600)
循环 600 次,生成 600 个点,点越多线条越平滑。
3. t = math.radians(i)
将角度 i(0~599)转为弧度
math 库只认弧度,不认角度。
4. x, y = heart_func(t)
调用函数,得到爱心上一个点的坐标。
5. pen.goto(x * 10, y * 10)
移动画笔到该坐标
乘以 10 是放大爱心,否则太小看不清。
6. pen.end_fill()
结束填充,自动闭合图形并上色。
模块 5:绘制中心文字
python
pen.penup()
pen.goto(0, -50)
pen.color("#c70039")
pen.write("I ❤️ Python", font=("Microsoft YaHei", 18, "bold"), align="center")
详细解释
1. pen.penup()
抬笔,移动时不画线。
2. pen.goto(0, -50)
移动到爱心中心偏下位置。
3. pen.color("#c70039")
深红色文字,更醒目。
4. pen.write(...)
参数:
- 文字内容
- font:字体、字号、加粗
- align="center":居中对齐
模块 6:保持窗口打开
python
turtle.done()
作用:阻止程序运行完自动退出,让窗口一直显示。
不加这行,画完会立刻关闭。
四、运行过程完整流程(从启动到结束)
1. 程序启动
导入 turtle、math → 创建窗口 → 设置背景色、标题。
2. 画笔准备
隐藏箭头 → 设置最快速度 → 设置红边粉填充。
3. 进入循环绘制
循环 600 次:
- 计算角度 t
- 代入爱心公式得到 (x,y)
- 画笔移动到该点
- 自动连线形成轮廓
4. 填充颜色
begin_fill 与 end_fill 之间的闭合曲线自动填充粉色。
5. 绘制文字
抬笔移动 → 写字 → 居中显示。
6. 程序挂起
turtle.done() 阻塞主线程,窗口保持。
五、数学原理深度拓展(可写进报告)
1. 参数方程是什么?
普通函数:y = f(x)
参数方程:x = f(t), y = g(t)
t 是参数,可理解为“时间/角度”。
爱心无法用 y=f(x) 简单表达,必须用参数方程。
2. 为什么用 sin、cos?
- 正弦、余弦具有周期性
- 能自然形成闭合曲线
- 高次组合可以构造复杂对称形状
3. 系数调整对爱心的影响
- 16:控制爱心宽度
- 13、5、2、1:控制上下饱满度与尖度
修改数值会变成:扁爱心、瘦爱心、怪异形状。
4. 点数量与平滑度
range(200):棱角明显
range(600):非常光滑
range(1000):更流畅但速度略慢
六、可扩展修改方向(丰富报告内容)
1. 改变颜色
python
pen.color('darkred', 'hotpink')
screen.bgcolor('black')
2. 改变大小
修改放大倍数:
python
pen.goto(x * 12, y * 12)
3. 动态渐变色爱心
可通过循环中不断修改 pencolor 实现彩虹爱心。
4. 加动态跳动效果
用定时器不断缩放爱心大小,实现呼吸效果。
5. 加名字表白
python
pen.write("I Love You", ...)