10分钟上手Manim天文学可视化:用代码重现行星运动与宇宙现象
你是否曾想过用代码将行星轨道、星系旋转等宇宙现象生动地呈现在屏幕上?Manim(数学动画引擎)作为一款社区维护的Python框架,不仅能绘制复杂数学图形,更是天文爱好者的可视化利器。本文将带你从零开始,用不到20行代码实现太阳系行星运动模拟,掌握三维坐标系转换、轨道参数计算等核心技巧。
为什么选择Manim进行天文可视化?
Manim专为数学动画设计,其核心优势在于精准的坐标系控制和流畅的动画系统。相比普通绘图库,它提供了三大关键特性:
- 三维空间操作:通过
ThreeDScene类支持球面坐标系转换,完美适配天体运动场景 - 参数化路径系统:
EllipticalPath等路径类可直接模拟椭圆轨道,避免复杂的物理公式推导 - 实时渲染反馈:OpenGL渲染器支持即时预览,加速调试过程
官方文档中详细介绍了这些核心功能,特别是三维场景模块和路径动画工具,为天文可视化提供了坚实基础。
准备工作:环境搭建与项目结构
首先确保已安装Manim。推荐使用官方提供的Docker镜像,避免依赖问题:
git clone https://gitcode.com/GitHub_Trending/man/manim
cd manim
docker build -t manim-astronomy -f docker/Dockerfile .
项目中与天文可视化相关的核心文件结构如下:
- 三维渲染核心:manim/renderer/opengl_renderer.py
- 轨道计算工具:manim/utils/paths.py(实现椭圆轨道插值算法)
- 示例场景:example_scenes/(包含基础几何动画模板)
实战:太阳系行星轨道模拟
基础框架搭建
创建astronomy_scene.py文件,继承ThreeDScene类并配置相机参数:
from manim import *
from manim.utils.paths import EllipticalPath
class SolarSystemScene(ThreeDScene):
def construct(self):
# 设置三维相机角度
self.set_camera_orientation(phi=60*DEGREES, theta=30*DEGREES)
# 添加坐标轴(可选)
axes = ThreeDAxes()
self.add(axes)
创建恒星与行星
使用Sphere和Star类构建天体模型,通过set_radius控制比例:
# 创建太阳(使用黄色发光球体)
sun = Sphere(radius=1.0, color=YELLOW, fill_opacity=0.8)
sun.add(Star(radius=0.8, color=YELLOW, fill_opacity=1).scale(0.5))
self.add(sun)
# 创建地球(蓝色球体带轨道)
earth_orbit = EllipticalPath(
center=ORIGIN,
major_axis=4.0,
minor_axis=3.8,
angle=30*DEGREES # 轨道倾角
)
earth = Sphere(radius=0.3, color=BLUE, fill_opacity=0.9)
self.add(earth)
实现轨道运动
利用Rotation动画和EllipticalPath实现行星公转:
# 地球公转动画(周期10秒)
self.play(
Rotation(
earth,
angle=2*PI,
about_point=ORIGIN,
path_func=earth_orbit,
run_time=10,
rate_func=linear
),
run_time=10,
loop=True # 设置循环播放
)
self.wait()
完整代码与效果
将上述代码整合,执行以下命令渲染:
manim -pql astronomy_scene.py SolarSystemScene
这段代码会生成一个包含太阳和地球的三维场景,地球将沿着椭圆轨道持续公转。通过调整major_axis和minor_axis参数,可以模拟不同偏心率的轨道形状。
进阶技巧:添加更多天文元素
卫星系统模拟
扩展代码添加月球围绕地球旋转:
# 添加月球
moon_orbit = EllipticalPath(center=earth.get_center(), major_axis=0.8, minor_axis=0.8)
moon = Sphere(radius=0.1, color=GRAY, fill_opacity=0.8)
self.add(moon)
# 月球公转(嵌套动画)
self.play(
Rotation(
earth, # 地球公转
angle=2*PI,
about_point=ORIGIN,
path_func=earth_orbit,
run_time=10,
rate_func=linear
),
Rotation( # 月球同时绕地球公转
moon,
angle=6*PI, # 更快的公转速度
about_point=earth.get_center(),
path_func=moon_orbit,
run_time=10,
rate_func=linear
),
run_time=10,
loop=True
)
星座绘制
利用Polyline和Dot类绘制星座连线:
# 绘制猎户座
orion_stars = VGroup(
Dot(point=3*RIGHT + 2*UP, color=WHITE),
Dot(point=2*RIGHT + 3*UP, color=WHITE),
# 添加更多恒星坐标...
)
orion_lines = Polyline(*[star.get_center() for star in orion_stars], color=WHITE, stroke_opacity=0.5)
self.add(orion_stars, orion_lines)
常见问题与优化建议
性能优化
当模拟多行星系统时,可启用缓存机制减少重复计算:
from manim.utils.caching import get_cache_dir
# 设置缓存目录
config["cache_dir"] = "./astronomy_cache"
渲染质量调整
修改渲染参数获得更高质量输出:
# 4K分辨率,60fps渲染
manim -pqk astronomy_scene.py SolarSystemScene --resolution 3840,2160 --fps 60
解决轨道倾斜问题
若行星轨道出现平面倾斜,检查ThreeDScene的相机设置,确保正确调用:
# 正确配置三维相机
self.set_camera_orientation(
phi=75*DEGREES, # 仰角
theta=45*DEGREES, # 方位角
distance=10 # 相机距离
)
总结与扩展学习
本文展示的行星系统只是Manim天文可视化能力的冰山一角。通过组合使用旋转矩阵、参数化路径和三维变换,还可以实现更复杂的场景:
- 星系旋臂生成(使用
ParametricFunction) - 行星凌日现象模拟(利用
Union布尔运算) - 引力弹弓效应演示(结合物理引擎)
官方文档的动画组合教程和三维变换指南提供了更多高级技巧。建议进一步研究路径插值算法,理解Manim如何实现平滑的轨道过渡效果。
现在,你已经掌握了用Manim创建天文可视化的核心技能。发挥想象力,尝试模拟更多宇宙现象,让抽象的天文概念变得直观可见!
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发起,感谢支持!Kotlin07
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00