尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Manim v0.9.0 变更深度解析:Table 与 Broadcast 新特性、废弃 API 迁移与 OpenGL 渲染器改进

发布时间:2026/9/11 18:20:02

资讯中心
01
ARTICLE

Manim v0.9.0 变更深度解析:Table 与 Broadcast 新特性、废弃 API 迁移与 OpenGL 渲染器改进

Manim v0.9.0 变更深度解析:Table 与 Broadcast 新特性、废弃 API 迁移与 OpenGL 渲染器改进
Manim v0.9.0 变更深度解析Table 与 Broadcast 新特性、废弃 API 迁移与 OpenGL 渲染器改进【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manimv0.9.0 是 Manim数学动画社区版框架于 2021 年 8 月发布的重要版本共合并 55 个 PR。本指南基于 0.9.0-changelog.rst 逐项解读该版本的新功能、废弃 API 迁移方案、OpenGL 渲染器增强、Bug 修复与图形化测试系统重构并结合当前仓库源码给出可验证的实现细节。读完本文你将掌握Table/Broadcast/Circle.from_three_points等新 API 的用法、从旧动画类向新 API 迁移的完整对照表以及frames_comparison图形化测试的编写方式。版本概况与贡献构成该版本日期标注为 August 02, 2021共有35 位贡献者参与提交名字后带标记者为首次提交补丁的新贡献者其中 19 位贡献者参与了补丁评审。版本号提升由 PR 1850 完成同时生成了变更日志。从仓库现状manim/mobject/、manim/animation/ 等目录看v0.9.0 引入的多数 API 至今仍是框架核心组成部分理解该版本有助于把握 Manim 后续演进脉络。新特性详解1. 全新 Table 系列 MobjectPR 1677v0.9.0 引入了易于使用且高度可定制的表格对象Table这是本版本最核心的新特性。当前实现位于 manim/mobject/table.pyTable继承自VGroup并通过element_to_mobject参数控制单元格内容的转换方式。仓库还提供四个常用子类类名单元格内容类型说明Table字符串默认Paragraph渲染通用文本表格MathTable数学公式MathTex渲染适合公式排版IntegerTable整数Integer渲染整数数据表格DecimalTable小数DecimalNumber渲染小数数据表格MobjectTable任意 Mobject单元格可为任意图形对象核心构造参数从源码 docstringmanim/mobject/table.py可确认以下关键参数table非空、有限、等长的可迭代对象集合内容须为element_to_mobject可接受的有效输入row_labels/col_labels行、列标签VMobject 可迭代对象top_left_entry左上角条目仅在同时指定行、列标签时可用v_buff默认 0.8/h_buff默认 1.3传递给arrange_in_grid的垂直/水平间距include_outer_lines默认 False/include_inner_lines默认 True是否包含外框线/内部分隔线add_background_rectangles_to_entries默认 False与entries_background_color为单元格添加背景矩形element_to_mobject单元格内容转换类默认Paragraphline_config传递给Line的线条自定义字典。单元格访问与高亮表格对象提供丰富的检索与样式方法例如from manim import * class TableExamples(Scene): def construct(self): t0 Table( [[First, Second], [Third, Fourth]], row_labels[Text(R1), Text(R2)], col_labels[Text(C1), Text(C2)], top_left_entryText(TOP), ) t0.add_highlighted_cell((2, 2), colorGREEN) t1 DecimalTable( [np.linspace(-2, 2, 5), np.exp(np.linspace(-2, 2, 5))], row_labels[MathTex(x), MathTex(f(x))], include_outer_linesTrue, ) t1.add(t1.get_cell((2, 2), colorRED)) self.add(t0, t1)该示例与仓库源码中的TableExamples场景manim/mobject/table.py一致add_highlighted_cell可整体高亮某个单元格get_cell返回指定单元格对象后可继续叠加样式get_horizontal_lines/get_vertical_lines返回网格线集合可批量设置颜色与z_index。表格还可用get_corner(DL)等VGroup继承方法获取角点坐标便于与其他图形组合。2. Broadcast 广播动画PR 1719新增的Broadcast动画以某个焦点为中心向外扩散多个逐渐放大并淡出的副本非常适合定位/信号发射类视觉表达。实现位于 manim/animation/specialized.py继承自LaggedStart。关键参数均有默认值focal_point广播中心默认ORIGINn_mobs从焦点发射的物体副本数量默认 5initial_opacity默认 1/final_opacity默认 0起始/最终描边透明度initial_width副本初始宽度默认 0.0从点开始放大remover动画结束后是否从场景移除副本默认 Truelag_ratio各副本之间的时间间隔默认 0.2run_time动画总时长默认 3 秒。class BroadcastExample(Scene): def construct(self): mob Circle(radius4, colorTEAL_A) self.play(Broadcast(mob))其底层原理manim/animation/specialized.py是保存传入 mobject 的状态 → 复制出n_mobs个副本 → 将副本移动到焦点并按initial_width缩放 → 通过Restore逐个还原为原始大小实现从一点爆发的效果。实现同时处理了填充fill_opacity与描边两种样式模式。3. Circle.from_three_points 三点定圆PR 1765:class:Circle新增静态方法from_three_points(p1, p2, p3)返回经过指定三点的圆实现在 manim/mobject/geometry/arc.pycircle Circle.from_three_points(LEFT, LEFT UP, UP * 2, colorRED) dots VGroup(Dot(LEFT), Dot(LEFT UP), Dot(UP * 2)) self.add(NumberPlane(), circle, dots)该方法的几何原理清晰可见对每对点构造垂直平分线取两条垂直平分线的交点line_intersection作为圆心再以圆心到任一点的距离np.linalg.norm作为半径。与之配套space_ops.py中新增了perpendicular_bisector(line, norm_vectorOUT)工具函数manim/utils/space_ops.py它通过cross(p1 - p2, norm_vector)求出垂线方向返回中垂线两端点。4. ParametricSurface.set_fill_by_value 数值着色PR 1686:class:ParametricSurface新增set_fill_by_value(axes, colorscale, axis2, **kwargs)方法可依据曲面点的坐标值施加颜色渐变并支持自定义颜色中心点。实现位于 manim/mobject/three_d/three_dimensions.py。参数说明axes用于将坐标值映射为颜色的坐标轴如ThreeDAxescolorscale按坐标值从低到高排列的颜色列表若传入颜色 数值的元组列表则该数值作为渐变枢轴点axis颜色映射所依据的坐标轴0 x1 y2 z。典型用法与仓库源码示例一致manim/mobject/three_d/three_dimensions.pyclass FillByValueExample(ThreeDScene): def construct(self): self.set_camera_orientation(phi75 * DEGREES, theta-160 * DEGREES) axes ThreeDAxes(x_range(0, 5, 1), y_range(0, 5, 1), z_range(-1, 1, 0.5)) def param_surface(u, v): return np.sin(u) * np.cos(v) surface_plane Surface( lambda u, v: axes.c2p(u, v, param_surface(u, v)), u_range[0, 5], v_range[0, 5], ) surface_plane.set_fill_by_value(axesaxes, colorscale[BLUE, GREEN, YELLOW, RED]) self.add(axes, surface_plane)5. NumberLine.add_labels 与 add_coordinates 支持字典PR 1780该 PR 允许向坐标轴添加非数值标签NumberLine.add_labels(dict_values, directionNone, buffNone, font_sizeNone, label_constructorNone)manim/mobject/graphing/number_line.py接受{位置: 标签}字典标签可为字符串、数值或任意 VMobject若传入非 Mobject 值则使用label_constructor默认取数轴的label_constructor属性构造标签。标签可通过self.labels访问。CoordinateSystem.add_coordinates同样支持传入字典实现在 manim/mobject/graphing/coordinate_systems.py 及NumberPlane的对应重载处同文件 L3317、L3498。number_line NumberLine(x_range[0, 10]) number_line.add_labels({1: Monday, 3: Tuesday, 5: Tex($\\pi$)})废弃 API 与迁移指南DashedLine / DashedVMobject 参数调整PR 1848dash_spacing参数已废弃未实际使用无替代positive_space_ratio更名为更简短的dashed_ratio。两者实现均保留在当前仓库中DashedLine在 manim/mobject/geometry/line.pyDashedVMobject在 manim/mobject/types/vectorized_mobject.py。移除 v0.7.0 / v0.8.0 之前废弃的全部类与函数PR 1773本版本彻底清理了旧 API迁移对照如下已移除类替代方案FadeInFrom、FadeOutAndShift、FadeOutToPoint、FadeInFromPoint、FadeInFromLarge、VFadeIn、VFadeOut、VFadeInThenOut使用FadeIn/FadeOut配合适当关键字参数CircleIndicate、ShowCreationThenDestruction、AnimationOnSurroundingRectangle、ShowPassingFlashAround、ShowCreationThenDestructionAround、ShowCreationThenFadeAround、WiggleOutThenIn、TurnInsideOutCircumscribe、ShowPassingFlash、WiggleOpenGLTexMobject、OpenGLTextMobjectMathTex、TexVMobjectFromSVGPathstringSVGPathMobject工具函数get_norm、cross对应的 Numpy 方法np.linalg.norm、np.cross函数angle_betweenangle_between_vectorsParametricSurface 参数改名PR 1731u_min/u_max→u_rangev_min/v_max→v_range。当前仓库中Surface的构造已统一使用u_range/v_range形式见上文FillByValueExample示例。增强改进OpenGL 渲染器系列增强OpenGL 兼容性扩展PR 1833VDict、Axes.get_line_graph、FocusOn支持 OpenGL 渲染器window_size 窗口尺寸控制PR 1760新增 CLI 标志接受x,y形式的元组。配置项定义于 manim/_config/default.cfg默认window_size default解析逻辑在 manim/_config/utils.pyCLI 传入的x,y字符串会被拆分为(x, y)数值元组同时新增了window_position配置默认UR渲染器内部重构PR 1808为所有OpenGLVMobject添加模型矩阵提升矢量化 Mobject 着色器性能新增隶属于场景而非单个 Mobject 的 updater实现位于 manim/renderer/opengl_renderer.py 与 manim/animation/updaters/其他 OpenGL 修复Tex在 OpenGL 渲染器下正常工作PR 1782、OpenGLMobject.shuffle修复并新增Mobject.invert的 OpenGL 支持PR 1783、put_start_and_end_on重写以正确支持 3DPR 1770、Code窗口尺寸过大问题修复PR 1844、.animate支持向 OpenGL 渲染器传参PR 1839。DashedVMobject 重写PR 1823虚线生成逻辑被完全重写用于更稳定地生成虚线段。其他增强DecimalNumber 省略号着色PR 1787当show_ellipsisTrue时省略号dots也会应用颜色Create 支持 OpenGLSurfacePR 1775:class:Create动画可作用于OpenGLSurfaceWrite 新增 reverse 参数PR 1774控制书写方向哈希数量告警PR 1757当待哈希对象数量过大时发出警告相关逻辑在 manim/utils/hashing.pyset_z_index 递归语义修复PR 1791:meth:Mobject.set_z_index现在会同步设置所有子对象的z_index。Bug 修复汇总ThreeDScene 的 frame_centerPR 1821修改frame_center会真实改变相机位置仅动画化frame_center的动画可正确渲染动画化后不再在原点生成黑色圆点BarChart.change_bar_valuesPR 1826修复缩放问题AnimationGroup 的 removerTruePR 1722正确移除成员热重载与 IDE 兼容PR 1727修复非 tty 终端下交互式 embed 失败、以及文件观察器第二次运行报错首个观察器未关闭的问题DecimalNumber 位数变化PR 1786修复数字位数改变时的显示错误PNG 格式 dry runPR 1792修复使用 PNG 格式时 dry run 失败manimlib 遗留导入PR 1790清理一处从manimlib的错误导入CLI 标志配置文件设置PR 1763修复部分 CLI 标志无法在配置文件中设置的问题get_riemann_rectanglesPR 1776改用函数图像的范围而非坐标轴范围未指定 range 时仅在面积被正确约束的区域生成矩形实现在 manim/mobject/graphing/coordinate_systems.pyLinearTransformationScenePR 1736修复多动画时崩溃实现在 manim/scene/vector_space_scene.py。图形化测试系统重构frames_comparisonPR 1802v0.9.0 重构了图形化单元测试系统并支持多帧测试核心是新增的frames_comparison装饰器manim/utils/testing/frames_comparison.py。它允许用类似construct的简单函数编写图形化测试并与 pytest 集成。核心规则被装饰的测试函数必须包含名为scene的参数且测试文件必须声明__module_test__变量last_frame参数默认 True决定只对比最后一帧若场景含移动动画必须设为 Falserenderer_class可选择CairoRenderer/OpenGLRenderer默认 Cairobase_scene可指定ThreeDScene等基类控制数据生成对某个测试运行pytest --set_test即可生成对照帧没有对照帧的测试会直接失败装饰器可带括号也可不带括号使用。配合 PR 1836全部图形化测试均已转换为新语法对照数据位于 tests/test_graphical_units/control_data/后续版本通过此类测试保证了各 mobject 与动画的渲染结果可回归验证。文档与基础设施改进安装文档PR 1807README 增加不同 Manim 版本不兼容的警告清理重复的pip install manim说明building blocks 教程PR 1739新增创建自定义动画章节见 docs/source/tutorials/building_blocks.rstrobots.txtPR 1827阻止旧版文档出现在搜索结果中文件位于 docs/source/robots.txtTabular 更名为 TablePR 1851PR 1677 中临时命名的Tabular统一更名为Table移除 pillow 版本限制PR 1817、新增 codespell 到贡献指南 linter 列表PR 1815、补充VMobject.set_fill文档与示例PR 1749、更新 README BibTeX 模板至 v0.9.0PR 1745。迁移建议总结若你正从 v0.8.x 升级优先处理废弃 API 迁移对照表中的替换项尤其是旧 Fade 系列、旧指示动画类与positive_space_ratio→dashed_ratio的更名新项目可直接使用Table系列构建表格、Broadcast制作扩散动画、Circle.from_three_points做几何构图使用 OpenGL 渲染器时可通过window_size与window_position配置窗口布局并充分利用新的场景级 updater 与模型矩阵带来的能力提升为 mobject 贡献图形化测试时采用frames_comparison装饰器并运行pytest --set_test生成对照数据。以上所有 API 的当前实现均可在仓库源码中直接查阅建议结合 manim/mobject/table.py、manim/animation/specialized.py 与 manim/utils/testing/frames_comparison.py 深入研读。【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。