当前位置: 首页 > news >正文

用Python代码绘制跳动的梦幻爱心,感受编程的浪漫与奇妙

在编程的世界里,代码不仅仅是冰冷的指令集合,它也可以充满浪漫与创意。今天,就带大家一起来看看如何用Python代码绘制出一个跳动的梦幻爱心,将数学的优雅与编程的魅力完美结合。
请添加图片描述

核心代码解析

1. 定义二维爱心函数

t = np.linspace(0, 2 * np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)

这里借助numpy库的linspace函数生成了1000个从0到 2 π 2\pi 2π的均匀分布的数值,作为参数t。通过这组参数t,利用特定的数学公式分别计算出xy坐标。这两个公式可不是随意编写的,它们是基于爱心曲线的参数方程得来,通过这些计算,我们就得到了爱心曲线上的一系列坐标点,为后续绘制爱心奠定了基础。

2. 创建图形与基本设置

fig, ax = plt.subplots(figsize=(8, 8))
ax.set_facecolor('black')
ax.set_xlim(-20, 20)
ax.set_ylim(-20, 20)
ax.set_aspect('equal')
ax.axis('off')

使用matplotlib库的subplots函数创建了一个大小为(8, 8)的图形窗口和对应的坐标轴对象ax。将坐标轴的背景颜色设置为黑色,这样可以让爱心更加突出。通过set_xlimset_ylim函数限定了坐标轴的显示范围,set_aspect('equal')确保爱心在显示时不会变形,保持其原本的形状,最后axis('off')隐藏坐标轴,让整个画面更加简洁美观。

3. 绘制爱心轮廓与填充

line, = ax.plot([], [], color='hotpink', lw=2)
fill = ax.fill([], [], color='red', alpha=0.8)[0]

这里创建了两个图形对象,line用于绘制爱心的轮廓,初始时它没有数据,颜色设置为hotpink(桃红色),线条宽度为2;fill用于填充爱心内部,颜色为红色,透明度设置为0.8,让爱心看起来更加柔和。

4. 添加星星装饰

num_stars = 100
stars_x = [random.uniform(-20, 20) for _ in range(num_stars)]
stars_y = [random.uniform(-20, 20) for _ in range(num_stars)]
star_sizes = [random.uniform(1, 4) for _ in range(num_stars)]
stars = ax.scatter(stars_x, stars_y, s=star_sizes, c='white', alpha=0.8)

为了让画面更加梦幻,添加了100颗星星。通过列表推导式随机生成星星的xy坐标以及大小,然后使用scatter函数将星星绘制在图形上,白色的星星搭配0.8的透明度,仿佛夜空中闪烁的繁星,为爱心增添了浪漫的氛围。

5. 动画初始化与更新函数

def init():line.set_data([], [])fill.set_xy(np.empty((0, 2)))return line, fill, starsdef update(frame):scale = 1 + 0.05 * np.sin(frame * 0.1)scaled_x = x * scalescaled_y = y * scaleline.set_data(scaled_x, scaled_y)fill.set_xy(np.column_stack([scaled_x, scaled_y]))alphas = [0.2 + 0.8 * abs(np.sin(frame * 0.05 + i * 0.1)) for i in range(num_stars)]stars.set_alpha(alphas)return line, fill, stars

init函数是动画的初始化函数,在动画开始前调用,它将爱心的轮廓和填充数据清空,返回相关图形对象,为动画做好准备。

update函数则是动画的核心更新函数,每帧动画都会调用这个函数。在这里,通过scale = 1 + 0.05 * np.sin(frame * 0.1)利用正弦函数计算出一个缩放因子,根据这个因子对爱心的坐标进行缩放,实现爱心跳动的效果。同时,为星星设置了闪烁效果,通过改变星星的透明度,让它们在夜空中一闪一闪,增加画面的生动性。

6. 创建动画与显示

ani = FuncAnimation(fig, update, frames=360, init_func=init, blit=True, interval=50)
plt.title("❤ Magical 2D Heart ❤", fontsize=24, color='magenta', pad=20)
mng = plt.get_current_fig_manager()
try:mng.window.state('zoomed')
except:try:mng.resize(*mng.window.maxsize())except:pass
plt.tight_layout()
plt.show()

使用FuncAnimation函数创建动画对象ani,指定了要更新的图形fig、更新函数update、动画帧数360、初始化函数init等参数,blit=True表示只更新变化的部分,提高动画效率,interval=50设置每帧动画之间的间隔为50毫秒。

添加标题让画面更具主题性,尝试将窗口设置为全屏显示(根据不同操作系统有不同的实现方式),最后使用plt.show()展示动画。如果需要保存动画为GIF格式,还可以使用ani.save('magical_heart.gif', writer='pillow', fps=20)这行代码(默认是注释掉的,需要时取消注释即可)。

总结

通过以上代码,我们利用Python的numpymatplotlib库,结合数学公式和动画原理,成功绘制出了一个跳动的梦幻爱心。从爱心曲线的构建,到图形的绘制与装饰,再到动画效果的实现,每一步都充满了编程的乐趣与创意。希望大家通过这个示例,能够感受到代码的魅力,也能尝试发挥自己的想象力,用代码创造出更多有趣、浪漫的作品! 如果你在运行过程中有任何问题,或者有新的创意想法,欢迎在评论区交流讨论。

相关文章:

  • 图与网络模型
  • 人工智能-深度学习之卷积神经网络
  • 如何在Cursor中使用MCP服务
  • 使用Python和Pandas实现的Amazon Redshift权限检查与SQL生成用于IT审计
  • Java SE(6)——类和对象
  • 贪心算法精解(Java实现):从理论到实战
  • python-MySQL鏈接
  • JavaScript延迟加载
  • 【深度学习-Day 2】图解线性代数:从标量到张量,理解深度学习的数据表示与运算
  • OpenStack Yoga版安装笔记(25)Nova Cell理解
  • 【ESP32】st7735s + LVGL使用-------图片显示
  • 【五一培训】Day1
  • MySQL基础关键_003_DQL(二)
  • WEB UI自动化测试之Selenium框架学习
  • 【HarmonyOS】作业三 UI
  • 【信息系统项目管理师-论文真题】2024上半年(第二批)论文详解(包括解题思路和写作要点)
  • 【云备份】服务端工具类实现
  • Unity动态列表+UniTask异步数据请求
  • 嵌入式AI还是一片蓝海
  • MySQL 服务搭建
  • 几天洗一次头发最好?终于有答案了...
  • 格桑花盛放上海,萨迦艺术团襄阳公园跳起藏族舞
  • Meta一季度净利增长三成:上调全年资本支出,受关税影响亚洲出口电商广告支出减少
  • 周劼已任中国航天科技集团有限公司董事、总经理、党组副书记
  • 秦洪看盘|资金切换主线,重构市场风格
  • ​关键词看中国经济“一季报”:韧,长期向好看底气