这个程序创建了一个会动的粉红色爱心,具有以下特点:
- 使用数学参数方程绘制标准爱心形状
- 爱心会在窗口内左右移动并带有重力效果
- 碰到窗口边缘会反弹,增加动画的真实感
- 爱心颜色设置为粉红色 (#FF69B4)
你可以通过修改代码中的参数来调整效果:
-
改变
size值调整爱心大小 -
修改
dx值改变水平移动速度 -
调整
gravity和bounce参数改变物理效果 -
更改
color参数可以设置不同的粉红色色调
运行程序后,会看到一个在窗口内自然移动、碰到边缘会反弹的粉红色爱心。
import tkinter as tk
import math
class AnimatedHeart:
def __init__(self, root):
self.root = root
self.root.title("跳动的爱心")
self.root.geometry("600x500")
self.root.config(bg="white")
# 创建画布
self.canvas = tk.Canvas(self.root, width=600, height=500, bg="white", highlightthickness=0)
self.canvas.pack()
# 爱心初始位置和移动参数
self.x = 100
self.y = 250
self.size = 30
self.dx = 2 # x方向移动速度
self.dy = 0 # y方向初始移动速度
self.gravity = 0.1 # 重力效果
self.bounce = -0.7 # 反弹系数
# 开始动画
self.animate()
def draw_heart(self, x, y, size, color="#FF69B4"):
"""绘制爱心形状"""
# 清除之前的爱心
self.canvas.delete("heart")
# 爱心的参数方程
points = []
for t in range(0, 360, 5):
angle = math.radians(t)
# 爱心参数方程
x_point = 16 * math.sin(angle)**3
y_point = 13 * math.cos(angle) - 5 * math.cos(2*angle) - 2 * math.cos(3*angle) - math.cos(4*angle)
# 缩放并移动爱心
points.append(x + x_point * size / 10)
points.append(y - y_point * size / 10) # 减号是因为y轴向下为正
# 绘制爱心并填充粉红色
self.canvas.create_polygon(points, outline=color, fill=color, tags="heart")
def animate(self):
"""动画循环"""
# 更新位置
self.x += self.dx
self.y += self.dy
self.dy += self.gravity # 应用重力
# 边界检测 - 左右边界反弹
if self.x + self.size * 1.5 > 600 or self.x - self.size * 1.5 < 0:
self.dx = -self.dx
# 边界检测 - 下边界反弹
if self.y + self.size * 1.5 > 500:
self.y = 500 - self.size * 1.5
self.dy = self.dy * self.bounce
# 绘制爱心
self.draw_heart(self.x, self.y, self.size)
# 循环动画
self.root.after(20, self.animate)
if __name__ == "__main__":
root = tk.Tk()
app = AnimatedHeart(root)
root.mainloop()