Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

python-simulation-color-map

将二维物理系统的状态通过颜色映射可视化为视频,并同步生成立体声音频。

本项目利用数值模拟或解析解,计算两个独立物理量(如弹簧振子的位移、双摆的角度)随时间的演化,然后将这两个量映射为颜色(RGB/HSV),生成连续的视频帧;同时,左右声道分别对应两个物理量,合成立体声 WAV 文件。最终将视频与音频合并,形成完整的多媒体演示。

🎯 项目背景与物理模型

本项目的灵感源于两球三弹簧谐振子双摆系统。通过拉格朗日力学推导其运动方程,并采用数值离散化(或解析解)进行模拟。

  • 两球三弹簧谐振子(已完整实现):
    两个质量相同的质点通过三个相同的弹簧连接在两面刚体墙之间。系统存在解析解,可分解为质心运动和相对运动两种简正模式,频率分别为 ω 和 √3 ω。

  • 双摆系统(代码框架已搭建,数值迭代器待完善):
    两个等长、等质量的摆组成的混沌系统。虽无解析解,但可借助数值方法(如离散化后的代数方程)求解。

📁 项目结构

python-simulation-color-map/
├── 公式推导/
│   └── main/
│       └── 公式推导.tex          # LaTeX 文档,含完整推导过程
├── 视频生成/
│   ├── 视频模拟/
│   │   ├── __init__.py
│   │   ├── 二维颜色映射.py       # 颜色映射函数(平面、球面、HSV)
│   │   └── 模拟.py               # 视频迭代器基类及弹簧链、双摆实现
│   ├── 音频模拟/
│   │   └── __init__.py           # 音频生成器基类及弹簧链实现
│   ├── main_生成弹簧系统模拟_1周期.py   # 主入口脚本
│   └── .gitignore
├── .gitignore
├── LICENSE
└── README.md                     # 本文件

🚀 快速开始

环境准备

确保已安装 Python 3.8+ 及以下依赖库:

pip install numpy opencv-python moviepy pydub

注意pydub 依赖 ffmpeg,请确保已安装 ffmpeg 并加入系统路径。

运行示例

进入 视频生成/ 目录,执行主脚本:

cd 视频生成
python main_生成弹簧系统模拟_1周期.py

脚本会:

  1. 生成一个周期()内弹簧系统演化的视频(无声),保存在 output/弹簧系统模拟_无声.mp4
  2. 生成对应的立体声音频(左右声道分别对应两个球的位移),保存在 output/弹簧系统模拟_音频.wav
  3. 将视频与音频合并为 output/弹簧系统模拟.mp4

您也可以修改 结束时刻 变量以调整模拟时长,或调整 基频系数 改变音频音高。

🎨 颜色映射说明

二维颜色映射将两个归一化坐标 (x1, x2)(范围通常为 [-1, 1][0, 2π])转换为 RGB 颜色。目前提供三种映射方式:

  • 平面映射R = (x1+1)/2, G = (x2+1)/2, B = (2-x1-x2)/2
  • 球面映射:将 (x1, x2) 视为单位球面上的点,计算第三轴
  • HSV 极坐标映射:将 (x1, x2) 视为极坐标,角度对应色相,半径对应饱和度,明度固定为 1

此外,还提供了多种效果增强函数(平方、指数、余弦等),用于调整颜色饱和度和亮度。

🔊 音频生成说明

音频生成器将两个物理量分别映射为立体声左右声道的振幅(归一化到 int16 范围)。每个声道为一维时间序列,与视频帧同步。默认采样率为 96 kHz,基频系数可调。

🧪 双摆系统(待完善)

模拟.py 中已定义 双摆模拟迭代器 类,但其 演进 方法尚未实现数值求解逻辑。如果您有兴趣,可以参考 公式推导.tex 中的离散化方程完成该迭代器,从而生成双摆的颜色映射视频。

📜 许可证

本项目采用 MIT License,欢迎自由使用和修改。

About

数值模拟颜色绘图

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages