ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Manim v0.6.0 技术版本解析:坐标系统重构、向量场重设计与 Click CLI 迁移

2026/9/11 15:34:04 拓冰建站 浏览量
Manim v0.6.0 技术版本解析:坐标系统重构、向量场重设计与 Click CLI 迁移 Manim v0.6.0 技术版本解析坐标系统重构、向量场重设计与 Click CLI 迁移【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manimManim Community Edition社区版的 v0.6.0 版本发布于 2021 年 5 月 2 日是该项目在 0.17.x 时代到来前的一次重大架构演进。本指南以 docs/source/changelog/0.6.0-changelog.rst 为骨架逐条剖析该版本引入的三大破坏性变更向量场模块重构、坐标系统升级、CLI 迁移到 Click、新增特性与 Bug 修复并结合当前仓库源码验证这些改动在实现层面的真实落地情况。读完本文你将完整理解 v0.6.0 的迁移要点、受影响的 API 清单以及这些设计决策如何塑造了今天的 Manim 代码结构。版本概览一次 破坏性 的架构升级v0.6.0 是 Manim 社区版早期发展中的重要里程碑。根据 0.6.0-changelog.rst 的记载发布日期2021 年 5 月 2 日贡献者规模共 40 人参与提交补丁名单中带标记的为首次贡献者如 Adam Ryczkowski、Alex Lembcke、Deniz Hasler 等合并 PR 数量共 112 个 Pull Request代码评审30 位贡献者参与评审。该版本的显著特征是多个 PR 同时引入破坏性变更涉及矢量场Vector Field、坐标系统Coordinate System与命令行接口CLI三大核心模块。这意味着从 v0.5.x 升级到 v0.6.0 的既有用户需要修改自己的场景代码与命令行调用方式。以下按破坏性变更、弃用与移除、新特性、增强、Bug 修复等类别逐一展开。破坏性变更一向量场模块重构PR 1347从VectorField到ArrowVectorField的命名演进PR1347重构了向量场模块并补充了文档。其核心变化是原VectorField更名为ArrowVectorField新增VectorField作为ArrowVectorField与StreamLines的共同超类AnimatedStreamLines被移除其功能并入StreamLinesShowPassingFlashWithThinningStrokeWidth被移动到indication指示模块。这一命名调整在当前的源码中得到完整保留。在 manim/mobject/vector_field.py 中可以看到清晰的类层级VectorField(VGroup)定义于第 58 行是向量场的基类默认不包含任何可见元素只提供让其他 Mobject 沿向量场运动的工具方法ArrowVectorField(VectorField)定义于第 470 行用一组箭头change vectors在网格上可视化向量场StreamLines(VectorField)定义于第 649 行绘制流线。从源码看VectorField构造函数的核心参数为参数含义func定义每个位置变化率的函数是向量场的数据来源color向量场颜色若设置则禁用按位置着色color_scheme将向量映射为标量的函数用于决定颜色梯度中的位置min_color_scheme_value/max_color_scheme_value映射到渐变首尾颜色的阈值colors定义向量场颜色渐变的颜色序列ArrowVectorField在其基础上追加了空间采样参数x_range、y_range、z_range均为[min, max, delta]形式、three_dimensions当z_range非空时自动开启、length_func控制箭头显示长度、opacity与vector_config。该文件顶部还定义了默认标量场颜色DEFAULT_SCALAR_FIELD_COLORS [BLUE_E, GREEN, YELLOW, RED]对应文档示例中按向量大小着色的默认行为。迁移示例v0.5.x 时期的写法func lambda pos: pos - LEFT * 5 self.add(VectorField(func))v0.6.0 之后的写法func lambda pos: pos - LEFT * 5 self.add(ArrowVectorField(func))对于需要自定义采样范围与箭头长度的场景func lambda pos: np.sin(pos[0] / 2) * UR np.cos(pos[1] / 2) * LEFT vf ArrowVectorField(func, x_range[-7, 7, 1], length_funclambda x: x / 3) self.add(vf)若使用了AnimatedStreamLines应改用StreamLines并参考其start_animation等接口。破坏性变更二坐标系统与 graphing 升级PR 1161以x_range统一范围声明PR1161对Axes、ThreeDAxes、NumberPlane和NumberLine引入了破坏性变更所有上述类统一改用列表形式声明范围取代原来分别显式定义x_min、x_max、x_step的方式x_range : [x_min, x_max, x_step]这一约定沿用至今在 manim/mobject/graphing/coordinate_systems.py 中可以看到Axes(VGroup, CoordinateSystem)第 1876 行、ThreeDAxes(Axes)第 2413 行、NumberPlane(Axes)第 2694 行的完整类链NumberLine(Line)则位于 manim/mobject/graphing/number_line.py 第 35 行。新旧语法对比旧语法v0.5.x 及更早axes Axes(x_min-5, x_max5, y_min-3, y_max3, x_step1, y_step1)新语法v0.6.0 起axes Axes(x_range[-5, 5, 1], y_range[-3, 3, 1])从当前源码中的方法签名可以看出这套体系的延续coords_to_point(*coords)第 158 行将坐标转换为场景点point_to_coords(point)第 163 行执行逆变换get_x_axis()/get_y_axis()第 248 / 251 行返回轴对象get_axis_labels()第 387 行用于生成轴标签。NumberLineOld为GraphScene兜底由于GraphScene尚未完成向Axes的迁移该 PR 引入NumberLineOld继续支撑GraphScene。changelog 同时明确表示项目正在逐步弃用GraphScene并计划在未来版本中将其正式标记为 deprecated。这一点在后续的文档类 PR1430中再次被强调因为仍需大量工作才能用Axes完全替代GraphScene所以当时暂未执行弃用流程。破坏性变更三CLI 从 Argparse 迁移到 ClickPR 1013命令选项位置变化向 POSIX 靠拢PR1013将命令行接口从argparse重构为click破坏了既有 CLI API 的组织结构。最直观的变化是选项必须位于参数之前以符合 POSIX 规范的惯例。# 旧写法Argparse 时期 manim basic.py -p -ql # 新写法Click 时期 manim -p -ql basic.py对于不确定的选项changelog 建议直接运行manim --help或不带参数直接执行manim查看完整的子命令/选项/参数清单。值得一提的是PR1359进一步将FILE设为必填参数参见manim/cli/render/commands.py使命令行行为更加明确。新增选项--fps/--frame_rate支持自定义非整数帧率如 29.97、23.98 等。用户不再需要从配置文件里指定 FPS。同时移除了--webgl_renderer_fps选项改用--fps/--frame_rate。--renderer用于选择渲染器例如--rendereropengl。changelog 明确指出此时共有三种渲染器可选Cairo、OpenGL 与 WebGL。移除与改名的选项旧选项处置方式--background_color移除其短选项-c被重新分配给--config_file--leave_progress_bars移除改用--progress_barsleave-l/-m/-h/-k旧渲染质量旗标移除已弃用多年--sound移除自 SoX 支持移除后早已失效后续 CLI 修补PR 1431、1354PR1431修复了一批 CLI Bug并产生新的弃用提示修复-f同时被--show_in_file_browser与--format占用的冲突从--format移除-f并发出警告-f将很快归属--format恢复以 gif / last frame 形式渲染文件的旗标并弃用它们、改用--format修复失效的--output_file/-o选项修复-qh质量选项被解析为-q -h从而误触发帮助页的问题。PR1354则重构了space_ops.py中的若干函数并弃用了angle_between函数。需要说明的是当前仓库的 CLI 实现已进一步演进例如 manim/cli/render/global_options.py 使用cloup的option_group组织全局选项其中仍保留-c/--config_file的绑定。本文描述的选项语义以 v0.6.0 发布时为准实际使用时请以当前版本的manim --help输出为准。已移除与弃用的 APIv0.6.0 集中清理了一批长期弃用的接口PR1370彻底移除TexMobject与TextMobject。这两个类已被弃用相当长时间现在完全删除用户应改用Tex或MathTexPR1349移除已弃用的SmallDotmobjectPR1259移除已弃用的CairoText类PR1354弃用angle_between位于space_ops.py。这类先弃用、后移除的节奏是 Manim 社区版 API 治理的典型路径通过多版本缓冲让用户有充足时间迁移再在特定版本中彻底删除。新特性从 3D 到 OpenGL 的全面补强图论工具顶点/边的动态增删PR 1386PR1386为图Graph实现了添加/移除顶点与边的工具方法并允许自定义 Mobject 作为顶点。这让基于manim.mobject.graph的场景可以动态演化图结构相关代码位于 manim/mobject/graph.py。Axes.get_line_graph一行代码绘制折线图PR 1385新增Axes.get_line_graph方法可从 x、y可选 z轴的点列表直接生成折线图。示例形态axes Axes(x_range[0, 10, 1], y_range[0, 10, 1]) line_graph axes.get_line_graph( x_values[0, 2, 4, 6, 8, 10], y_values[1, 3, 2, 5, 4, 6], )它解决了以往需要手动构造折线Polygon/VMobject并逐点coords_to_point的繁琐流程。OpenGL 渲染器的热重载PR 1381PR1381为 OpenGL 渲染器加入热重载当输入文件被修改时自动重新运行场景。这对长周期迭代动画脚本的开发体验提升明显配合--rendereropengl使用即可实时看到改动效果。Scene.interactive_embed交互式场景调试PR 1285新增Scene.interactive_embed方法允许在 OpenGL 渲染下通过鼠标、键盘以及 iPython 终端与场景动态交互。这为调试、探索动画状态提供了 REPL 级别的控制力其实现位于 manim/scene/scene.py 等场景模块中。无动画场景自动渲染图片PR 1261如果场景中没有任何动画而用户请求预览/渲染视频将自动渲染为图片而非抛出令人困惑的错误。这消除了只画静态图却必须套一个self.wait()才能出图的常见困扰。OpenGL 支持文本与 SVGPR 1200PR1200为 OpenGL 渲染器补上了文本Text与 SVG mobject 支持使--rendereropengl在更多场景下可用。后续 PR1340又让FadeTransform、FadeTransformPieces、TransformMatchingShapes、TransformMatchingTex等新式变换动画兼容 OpenGLPR1321则补齐了AnimationGroup的 OpenGL 支持。指示Indication动画模块大修PR 1383PR1383对manim.animation.indication模块的接口进行了整体重构新增Circumscribe类合并了CircleIndicate、AnimationOnSurroundingRectangle、ShowPassingFlashAround、ShowCreationThenDestructionAround、ShowCreationThenFadeAround的功能上述类均已弃用。当前源码中Circumscribe(Succession)位于 manim/animation/indication.py 第 571 行Flash调整参数语义flash_radius现在定义动画的内半径新增time_width参数ShowCreationThenDestruction弃用改用ShowPassingFlashApplyWave全新实现新增wave_func、time_width、ripples参数WiggleOutThenIn更名为Wiggle旧名弃用当前源码中Wiggle(Animation)位于 manim/animation/indication.py 第 488 行为以上所有类补充了文档与示例。多面体与柏拉图立体PR 1348新增Polyhedron类以及四种柏拉图立体Tetrahedron正四面体、Octahedron正八面体、Icosahedron正二十面体、Dodecahedron正十二面体。当前源码位于 manim/mobject/three_d/polyhedra.py其中Polyhedron(VGroup)定义于第 30 行四个柏拉图立体分别定义于第 163、198、244、309 行。这为 3D 几何演示提供了开箱即用的正多面体素材。增强与细节改进arrange_in_grid真正可用的网格排版PR 1398PR1398修复并增强了Mobject.arrange_in_grid使其真正按网格排列子对象并新增参数buff子对象间距cell_alignment单元格内对齐row_alignments/col_alignments行/列对齐方式row_heights/col_widths行高/列宽flow_order填充顺序其他值得注意的增强PR内容1407vector_coordinate_label更名为Vector.coordinate_label并移入geometry.py1380允许图片对象作为背景图1391Transform的path_arc参数支持.animate语法1364新增Mobject.match_points在保持样式不变的前提下将点、位置与子对象匹配到目标对象1363更改 TeX 编译器与输出文件格式1304改进 TeX 字符串在双重花括号处的切分逻辑1343TexTemplate()简化为返回简单模板而Tex()保留默认模板PR 1248 为TexTemplate增加Copy功能1302VMobject.point_from_proportion对alpha超出 [0, 1] 或对象无点的情况抛出合适错误1315修复VMobject.get_arc_length的性能问题1320默认图片扩展名新增jpeg1234新增Mobject.get_midpoint返回对象描边线的中点1237检测到 Manim 版本过旧时通知用户1308改进ManimBanner动画1275SVGMobject支持 SVGline元素1238Mobject.rotate新增about_point参数1260Brace 从 TeX 改为 SVG 实现1122支持为单个ImageMobject指定插值算法1283Scene的random_seed默认值改为None原为固定的 01220Mobject.add_to_back增加健全性检查禁止添加自身ValueError、禁止添加非 MobjectTypeError、过滤重复子对象1249Rectangle的角点改为逆时针排列改善矩形与其他简单对象的变换效果Bug 修复精选PR 1368确保检查最新版本的操作本身失败时不会引发异常PR 1413修复add_to_back重复添加同一对象的问题对应 issue 1412PR 1395SVG 变换支持科学计数法如6.02e23PR 1355重写put_start_and_end_on使其在 3D 下正常工作PR 1346修复MathTex中残留print引发的错误PR 1305自动移除超出NumberLine范围的长刻度线PR 1296修复随机的 TeX 流水线失败PR 1274重写VMobject.point_from_proportion使其考虑曲线长度新增get_nth_curve_function_with_length等辅助函数。文档、测试与开发基础设施v0.6.0 在文档侧投入了大量精力其中与使用者直接相关的有PR 1430暂缓弃用GraphScene并修复旧式NumberPlane调用示例PR 1425README 新增 How to Cite Manim 章节PR 1387将 GitHub Wiki 的示例贡献指南迁入官方文档PR 1389新增 Admonitions 教程PR 1362新增模块快速参考PR 1376文档中加入flake8与isort用法说明PR 1351 / 1338 / 1300 / 1301 / 1232 / 1246 / 1298 / 1301为Mobject、ValueTracker等核心类补充 docstring、类型标注与示例PR 1297文档从sphinx.ext.linkcode切换到sphinx.ext.viewcode并移除conf.py中的linkcode_resolvePR 1251文档主题从 guzzle-sphinx-theme 切换为furoPR 1269补充set_color_by_tex的文档PR 1029在示例目录中加入 Jupyter notebook 示例PR 1268新增解释 Manim 各版本差异的文档PR 1247为.animate语法补充使用警告。测试与基础设施方面PR 1299改进了图形化单元测试GraphicalUnitTest的像素比较逻辑——不同值红色像素现在显示在相同值绿色像素之上CI 侧则围绕 poetry venv 缓存PR 1436、1435、1257、macOS 流水线PR 1339、1255、flake8/isort 预提交钩子PR 1278、1270、1294等做了大量加固。PR 1279 将 sphinx 依赖加入pyproject.toml使新贡献者通过poetry install即可构建文档无需额外执行pip install -r requirements.txt。这些改动与当前仓库中 pyproject.toml、tests/test_graphical_units/ 等目录的结构一脉相承。迁移清单与升级建议综合 v0.6.0 的全部变更从 v0.5.x 升级时建议按以下清单排查向量场VectorField→ArrowVectorFieldAnimatedStreamLines→StreamLines坐标系统所有x_min/x_max/x_step显式参数 →x_range[x_min, x_max, x_step]列表形式Axes、ThreeDAxes、NumberPlane、NumberLine均受影响命令行选项放到参数之前manim -p -ql basic.py--background_color已移除、-c现为--config_file进度条用--progress_barsleave帧率用--fps或--frame_rate可用--renderer选择渲染器文本类TexMobject/TextMobject/CairoText已删除改用Tex/MathTex/Text指示动画CircleIndicate等五个类合并为CircumscribeWiggleOutThenIn→WiggleShowCreationThenDestruction→ShowPassingFlash杂项SmallDot已移除angle_between已弃用VectorField相关的颜色方案参数color_scheme、min_color_scheme_value、max_color_scheme_value、colors可按新基类文档重新配置。从当前仓库的源码结构manim/mobject/vector_field.py、manim/mobject/graphing/coordinate_systems.py、manim/mobject/three_d/polyhedra.py、manim/animation/indication.py可以确认v0.6.0 确立的类层级与命名约定VectorField作为超类、Axes使用x_range、Circumscribe/Wiggle的命名、四个柏拉图立体类一直延续到了当前版本成为 Manim 社区版长期 API 的基石。对于希望理解 Manim 演进史、或正在维护基于 v0.5.x 旧代码的用户而言这份 changelog 是定位迁移断点的关键参考。【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考