流体之美:用Python可视化隐藏在数学公式中的流动奥秘
你是否曾好奇过烟圈如何形成完美的环形?咖啡里的奶泡为何会扩散成复杂图案?这些看似随机的流体运动,其实都遵循着精妙的数学规律。本文将带你探索GitHub_Trending/vi/videos项目中如何用代码揭示流体力学的底层逻辑,无需高深数学背景,只需跟随示例就能亲手创建流动的视觉盛宴。
从公式到动画:流体模拟的核心原理
流体力学的本质是追踪无数微小粒子的运动轨迹。在_2015/ka_playgrounds/fluid_flow.py中,开发者通过向量场(Vector Field)模型简化了这一过程。向量场就像一张看不见的"速度地图",每个点都指示了流体在该位置的运动方向和速度。
# 流体流动的核心计算逻辑
def use_function(self, function):
self.function = function # 定义向量场函数
def flow(self, **kwargs):
# 让粒子点沿着向量场运动
self.play(ApplyToCenters(
PhaseFlow,
self.dots.split(),
function = self.function, # 应用向量场
**kwargs
))
上述代码来自FluidFlow类的核心实现,它通过PhaseFlow动画使粒子点按照预设的向量场函数运动。这种方法虽然简化了完整的Navier-Stokes方程,但保留了流体运动的视觉特征,完美平衡了计算效率与可视化效果。
动手实践:创建你的第一个流体动画
基础环境准备
项目使用Manim(数学动画引擎)实现可视化效果。通过以下命令可快速复现流体模拟场景:
# 在项目根目录执行
python -m manim _2015/ka_playgrounds/fluid_flow.py VectorFieldExample -pl
这条命令会运行VectorFieldExample场景,生成一个包含向量箭头和流动粒子的动画。参数-pl表示"预览低质量"模式,适合快速测试。
核心组件解析
FluidFlow类提供了三种关键可视化元素,通过组合这些元素可以创建丰富的流体效果:
- 坐标轴(Axes):提供空间参考系
- 向量箭头(Vectors):显示速度场方向和大小
- 粒子点(Dots):模拟流体微团的运动轨迹
# 典型场景构建流程
def construct(self):
# 定义向量场函数:双涡旋流动
self.use_function(lambda (x, y, z):
0.5*((2*y)**3-9*(2*y))*RIGHT +
0.5*((2*x)**3-9*(2*x))*UP
)
self.add_axes(show_creation=True) # 添加坐标轴
self.add_vectors(show_creation=True) # 添加向量箭头
self.add_dots(show_creation=True) # 添加粒子点
self.flow(run_time=30, virtual_time=3) # 执行流动动画
这段代码创建了一个具有四个漩涡的流动场(如图1所示),粒子会被吸引到四个平衡点形成的"势阱"中。通过修改向量场函数,我们可以模拟不同类型的流体行为。
流体行为的四种基本模式
1. 旋转流动(漩涡)
ConstantPositiveCurl场景展示了理想的漩涡运动,其向量场函数为:
lambda p: 0.5*(-p[1]*RIGHT + p[0]*UP)
这个函数创建了绕原点的匀速圆周运动,粒子点会形成同心圆轨迹。在实际流体中,浴缸排水时的漩涡就是这种模式的典型例子。运行以下命令可查看效果:
python -m manim _2015/ka_playgrounds/fluid_flow.py ConstantPositiveCurl -pl
2. 汇聚与发散
流体既可以像水池放水一样汇聚(NegativeDivergenceExamlpe),也可以像喷泉一样发散(PositiveDivergenceExample)。这两种模式的核心区别在于向量场的散度(Divergence)符号:
# 汇聚流动(负散度)
lambda p: -p/(2*get_norm(0.5*p)**0.5 + 0.01)
# 发散流动(正散度)
lambda p: p/(2*get_norm(0.5*p)**0.5 + 0.01)
这两种模式在_2015/ka_playgrounds/fluid_flow.py中分别由NegativeDivergenceExamlpe和PositiveDivergenceExample类实现,直观展示了流体源和汇的概念。
3. 剪切流动
IncompressibleFluid场景模拟了剪切流,其特点是流体层之间的相对滑动:
lambda (x, y, z): RIGHT + np.sin(x)*UP
这种流动没有漩涡(旋度为零),但会使初始规则排列的粒子逐渐变形。大气中的喷气气流、河流中不同水层的流动都属于剪切流动。
4. 复杂流动模式
FourSwirlsWithoutCircles场景展示了更复杂的四漩涡系统:
lambda (x, y, z): 0.5*(y**3-9*y)*RIGHT + (x**3-9*x)*UP
这个三次函数创建了四个平衡点,形成类似"双吸引子-双排斥子"的复杂流动模式。运行该场景可以观察粒子如何在多个漩涡之间"跳转",最终稳定在吸引子周围。
高级应用:参数调整与视觉优化
控制流动速度与时长
flow方法的两个关键参数控制动画效果:
- run_time: 实际播放时间(秒)
- virtual_time: 模拟时间长度(物理时间)
# 慢动作展示细节
self.flow(run_time=20, virtual_time=2)
# 快速预览整体效果
self.flow(run_time=5, virtual_time=10)
调整这两个参数的比值可以实现"慢动作"或"快进"效果,帮助观察不同时间尺度下的流动变化。
自定义视觉风格
FluidFlow类提供了丰富的配置选项,可定制向量场的视觉呈现:
CONFIG = {
"vector_spacing": 1, # 向量箭头间距
"dot_spacing": 0.5, # 粒子点间距
"dot_color": BLUE_C, # 粒子颜色
"vector_color": YELLOW, # 向量颜色
"vector_length": 0.5 # 向量箭头长度
}
通过修改这些参数,可以创建从稀疏抽象到密集写实的各种视觉风格,适应不同的展示需求。
项目资源与扩展学习
关键文件速查表
| 文件路径 | 主要内容 | 应用场景 |
|---|---|---|
| _2015/ka_playgrounds/fluid_flow.py | 流体流动核心实现 | 所有流体模拟场景 |
| manim_imports_ext.py | 扩展动画组件 | 高级视觉效果 |
| custom/backdrops.py | 背景样式定义 | 场景美化 |
推荐探索的场景类
- VectorFieldExample:基础向量场与粒子流动
- CurlArticleExample:展示旋度效应的复杂流动
- DropletFlow:高密度粒子模拟,呈现烟雾/水墨效果
- QuadraticField:二次向量场,展示鞍点附近的流动特性
结语:数学与艺术的完美融合
流体模拟不仅是科学研究的工具,也是一种独特的视觉艺术形式。通过_2015/ka_playgrounds/fluid_flow.py中优雅的代码实现,我们得以看见数学公式背后的流动之美。无论是研究流体力学的学生,还是热爱数据可视化的创作者,都能从这个项目中获得启发。
下一步,不妨尝试修改向量场函数,创造属于自己的流体图案。你或许会发现,那些曾经晦涩的数学公式,其实蕴藏着令人惊叹的视觉宝藏。
提示:项目中还有更多隐藏的流体场景等待探索。使用
grep -r "class.*FluidFlow"命令可以发现所有相关实现,开启你的流体可视化之旅吧!
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00