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创建天文可视化的核心技能。发挥想象力,尝试模拟更多宇宙现象,让抽象的天文概念变得直观可见!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00