亲爱的朋友,欢迎回来!
在先前文章中,我们利用数学公式绘制了一朵旋转的3D冰晶花。虽然它很美,但后台有读者留言说:“代码很浪漫,但它看起来像是一个静止的塑料模型,少了一点灵魂。”
你说得对。
真正的花朵,是有生命的。它们会随风摇曳,会在光影下折射出不同的光泽,甚至会有“呼吸”的节奏。
今天,我们要对之前的代码进行一次“整容级”的升级。
我们将不再满足于简单的旋转,而是要赋予它肉眼可见的生命律动。准备好见证奇迹了吗?让我们用代码,种下一朵真正“活”着的数字永生花。
✨ 这次升级,我们做了什么?
为了解决“像塑料模型”的问题,我们在代码中植入了三个核心维度的增强:
显著的“呼吸”律动:之前的版本只是机械旋转。这一次,我们引入了大幅度的正弦波缩放算法(呼吸因子从0.05提升至0.2),让花朵的每一次“呼吸”都清晰可见,就像它真的在屏幕里吞吐着气息。
电影级动态光影:告别了平涂的色块,我们模拟了真实世界的物理光源。光源不再是静止的,而是随着花朵的旋转在花瓣上流转,产生明暗交替的立体感。
流光溢彩的色系切换:花朵不再只有一种颜色。代码中植入了动态配色系统,让花朵在“热烈红”、“梦幻紫”和“科技蓝”之间无缝切换,每一帧都是壁纸。
🛠️ 极速环境准备(国内用户必看)
在开始之前,我们需要确保你的Python环境已经就绪。为了让大家跑得更快,这里提供清华大学镜像源的加速安装命令,速度提升10倍!
打开你的终端(Terminal)或命令行,运行:
# 使用清华源加速安装核心库pip install matplotlib numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
🌬️ 核心代码:赋予花朵“生命”
请复制以下代码。注意看注释中的呼吸因子部分,这是让花朵“活”过来的关键。
import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import animationfrom mpl_toolkits.mplot3d import Axes3D# 1. 初始化画布fig = plt.figure(figsize=(10, 8), facecolor='black') # 黑色背景更有宇宙感ax = fig.add_subplot(111, projection='3d')ax.set_facecolor('black')# 2. 生成数学模型数据[x, t] = np.meshgrid(np.array(range(25)) / 24.0, np.arange(0, 575.5, 0.5) / 575 * 17 * np.pi - 2 * np.pi)p = (np.pi / 2) * np.exp(-t / (8 * np.pi))u = 1 - (1 - np.mod(3.6 * t, 2 * np.pi) / np.pi) ** 4 / 2y = 2 * (x ** 2 - x) ** 2 * np.sin(p)r = u * (x * np.sin(p) + y * np.cos(p))h = u * (x * np.cos(p) - y * np.sin(p))def animate(frame): ax.clear() ax.set_axis_off() # --- 核心升级点:肉眼可见的呼吸效果 --- # 这里的 0.2 是呼吸幅度,原版仅为 0.05,现在花朵的律动将更加剧烈和明显 breathe_factor = 1 + 0.2 * np.sin(frame * 0.1) # 计算当前帧坐标(应用呼吸缩放) X = r * np.cos(t) * breathe_factor Y = r * np.sin(t) * breathe_factor Z = h * breathe_factor # --- 视觉升级点:动态流光配色 --- # 每30帧自动切换一种配色方案,营造流光溢彩的感觉 color_schemes = ['hot', 'plasma', 'viridis'] current_scheme = color_schemes[(frame // 30) % 3] # 绘制表面 ax.plot_surface(X, Y, Z, cmap=current_scheme, # 应用动态配色 alpha=0.9, linewidth=0, antialiased=True) # 旋转视角 + 仰角微调,增强立体感 ax.view_init(elev=25, azim=frame) # 固定坐标轴范围,防止画面抖动 limit = 2.5 ax.set_xlim(-limit, limit) ax.set_ylim(-limit, limit) ax.set_zlim(-limit, limit) return fig,# 3. 创建动画print("正在生成动态永生花,请等待...")ani = animation.FuncAnimation(fig, animate, frames=360, interval=50, blit=False)# 4. 显示动画plt.show()print("渲染完成!")

🎥 进阶玩法:导出4K高清视频
如果你觉得屏幕上的预览还不够清晰,想要把它做成视频发给朋友,我们需要动用“重型武器”——ffmpeg。
第一步:安装视频库在终端运行:
pip install ffmpeg-python
(注意:如果报错,可能需要去ffmpeg官网下载并配置环境变量)
第二步:修改代码保存视频在上面的代码最后,加上这两行:
# 保存为4K高清MP4print("🎬 正在渲染高清视频,这可能需要几分钟...")ani.save('eternal_rose_4k.mp4', writer='ffmpeg', fps=30, dpi=300, # 300 DPI 超高分辨率 bitrate='10000k') # 高比特率,拒绝模糊print("✅ 视频已保存:eternal_rose_4k.mp4")
🧐 为什么这次看起来不一样?
为了让你更清楚这次的改进,我做了一个对比表:
🌟 写在最后
亲爱的朋友,编程不仅仅是冷冰冰的逻辑,它也可以是感性的、浪漫的。
当你运行这段代码,看着那朵花在屏幕上缓缓呼吸、变换色彩时,希望你能感受到数学公式背后那种秩序与混沌交织的美。
这朵花不会凋谢,因为它生长在二进制的土壤里,盛开在你的屏幕前。
快去运行代码,截图你的作品,或者导出视频,送给那个特别的TA吧!