当前位置: 首页 > news >正文

amp;#128640; Manim CE v0.20.0 发布:动画构建更丝滑,随机性终于“可控”了!

大家新年好!Manim Community Edition(CE) 刚刚发布了里程碑式的v0.20.0版本。

如果你觉得以前写updater(更新程序)太啰嗦,或者每次渲染随机场景结果都不一样让你抓狂,那么这次更新绝对是为你准备的!

本次更新不仅重构了核心组件,还带来了一些超甜的“语法糖”。

下面我们来看看这次升级的亮点,以及它们如何改变你的编码方式。

✨ 亮点一:Mobject.always—— 告别繁琐的 Lambda

在制作动画时,我们经常需要让一个物体“永远”跟随另一个物体(比如标签永远在点的上方)。

以前,你需要使用add_updater配合lambda函数,代码看起来又长又乱。

v0.20.0引入了神奇的.always属性,让这一切变得符合直觉。

🆚 对比示例:让标签跟随方块

以前的写法 (v0.19.x 及之前):
你需要显式地添加一个更新函数,或者写一个 lambda 表达式。

/* by 01130.hk - online tools website : 01130.hk/zh/quchong.html */ s = Square() label = Text("我在这里") # 你必须这样写: label.add_updater(lambda m: m.next_to(s, UP)) # 或者这样写: def update_label(m): m.next_to(s, UP) label.add_updater(update_label)

现在的写法 (v0.20.0):
直接用always,像说话一样自然!

/* by 01130.hk - online tools website : 01130.hk/zh/quchong.html */ s = Square() label = Text("我在这里") # 新语法:永远.紧挨着(方块, 上方) label.always.next_to(s, UP)

💡为什么好用?这不仅减少了代码量,还让代码的可读性大幅提升。

🎲 亮点二:可复现的随机性

对于制作数学或科学视频的人来说,"随机"有时候是个麻烦。

你想展示 10 个随机点,但你不希望每次重新渲染视频时,这 10 个点的位置都变了。

v0.20.0终于引入了正式的Seed(种子)配置

🆚 对比示例:生成随机点

以前的情况:
每次运行manim render,随机生成的位置都会变化(除非你自己手动在 Python 脚本里 hackrandom.seed)。

现在的情况:
你可以通过配置文件或命令行参数锁定“运气”。

方式 1:命令行参数

# 只要种子是 42,生成的画面永远一模一样 manim -pql scene.py MyScene --seed 42

方式 2:代码内配置

from manim import * config.seed = 123 # 在脚本开头锁定种子 class RandomDemo(Scene): def construct(self): # 无论运行多少次,这个圆的位置都是固定的 dot = Dot(point=[np.random.random(), np.random.random(), 0]) self.add(dot)

📐 亮点三:MathTex 重构与更强的子结构控制

公式是Manim的灵魂。v0.20.0重写了MathTex的底层逻辑。

现在的MathTex在处理LaTeX拆分时更加健壮,而且能够利用SVG的“命名组”特性。

这意味着,当你把公式拆分成不同部分进行着色或变换时,出错的概率大大降低了。

🔧 示例:精准控制公式颜色

class MathUpdate(Scene): def construct(self): # 使用 {{ }} 将想要独立操作的字符包裹起来 # Manim 会自动把这些部分分离成独立的子对象(submobjects) equation = MathTex(r"{{a}}^2 + {{b}}^2 = {{c}}^2") # 现在 "a" 是独立的,染色不会影响 "^2" equation.set_color_by_tex("a", BLUE) equation.set_color_by_tex("b", GREEN) equation.set_color_by_tex("c", RED) self.add(equation) self.wait(1)

⚠️ 注意:破坏性变更与修复

升级前,请留意以下变化,你的老代码可能需要微调:

  1. ImageMobject 的修复:如果你以前对图片进行了 3D 旋转或翻转,可能会发现行为变了——因为以前是错的,现在修好了!同时,移除了一些不常用的重采样算法参数(如lanczos)。
  2. 新颜色常量:如果你是设计强迫症,现在可以使用PURE_CYAN(纯青)、PURE_MAGENTA(纯洋红)和PURE_YELLOW(纯黄)。
  3. Table 修复:修复了高亮表格单元格时可能导致的无限递归崩溃问题。

🔧 技术债务清理

1. 减少对 SciPy 的依赖

用 Python 标准库的math.comb替代了scipy.special.comb,减少了外部依赖,让安装更轻量。

2. 类型提示系统完善

为多个核心模块添加了类型注解:

  • rotation.py
  • image_mobject.py
  • opengl_renderer.py
  • point_cloud_mobject.py

这对于使用 IDE 进行开发的用户来说是个好消息,可以获得更好的代码补全和类型检查支持。

3. 移除未来导入要求

不再强制要求from __future__ import annotations,简化了代码编写。

📚 文档改进

  1. 完善了RandomColorGenerator的文档
  2. 改进了TransformFromCopy的文档字符串
  3. 修复了损坏的外部链接
  4. 更新了 Python 版本要求文档

📦 如何升级?

准备好体验新功能了吗?打开终端,运行:

pip install --upgrade manim

或者如果你使用 conda:

conda update manim

快去试试那个超酷的.always属性吧!

💡 总结

manimCE v0.20.0是一个注重稳定性和开发体验的版本。虽然有一些破坏性变更,但带来的改进是值得的:

  • MathTeX更稳定可靠
  • ✅ 动画构建更直观
  • ✅ 代码质量更高
  • ✅ 文档更完善
  • ✅ 可复现的随机效果

特别是Mobject.always这个新特性,让动画编写变得更加优雅。强烈建议大家升级体验!

http://www.jsqmd.com/news/399206/

相关文章:

  • 镜像宣城示范工程:三维空间计算重塑城市运行逻辑——基于三角测量厘米级定位与无感连续表达的空间级感知革命
  • 在“成为超人”与“仍是自己”之间:神经增强时代的哲学追问与文明责任——基于赵中华《神经增强的超人类主义叙事与批判性反思》的延伸思考
  • python dict setdefault方法
  • 无人驾驶-2024-09-智能驾驶与机器视觉08:视觉建图与定位
  • 食品X光机技术盘点:从看见到看懂核心升级
  • 企业集成平台iPaaS市场格局与主流产品选型测评
  • API管理系统:企业数字化转型的桥梁与核心价值解析
  • 《信号与系统》欧拉公式、泰勒级数、拉普拉斯变换、傅里叶变换、小波变换,他们出现的时间顺序以及他们之间的关系
  • MySQL锁机制:行锁与表锁及锁升级原理
  • 第3章 Windows运行机理-3.1 内核分析(6)
  • [Kaleidscope of Physics] 有心力和有心运动
  • 第3章 Windows运行机理-3.1 内核分析(7)
  • 2026年永真片市场概览:哪些品牌口碑与销量俱佳?永真片/生脉饮/养胃颗粒/抗衰老片/人参方,永真片品牌推荐排行榜单 - 品牌推荐师
  • 深入浅出Java线程池(二)
  • 本科生收藏!千笔,备受推崇的AI论文平台
  • vue+springboot校园学生健康监测数据管理系统的设计与实现
  • vue+springboot校园活动报名系统 场地预约系统
  • vue+springboot微信小程序 网上订餐配送系统
  • vue+springboot新农村信息平台建设——土地资源管理子系统
  • 浮点数在内存中的存储结构
  • [杂] 稍后再看
  • Kafka生态深化——Schema与Connect、CDC入湖的链路与一致性挑战
  • [杂] 网易云评论区评论烟之暗面
  • 研究生必看!圈粉无数的降AIGC软件 —— 千笔·降AIGC助手
  • 真空管市场2026新观察:这些厂商为何备受瞩目?液氩/真空管/液氧/制氮机/液氮/二氧化碳,真空管直销厂家找哪家 - 品牌推荐师
  • 京东e卡回收新思路,让闲置卡券“活”成现金流 - 京顺回收
  • 2026中低压管件生产新趋势,高压管件实力厂商盘点,管件/保温管道/工厂预制化管道/三通管件,高压管件供应商排行 - 品牌推荐师
  • 交稿前一晚!本科生必备的降AI率网站 —— 千笔·降AI率助手
  • 直接上结论:更贴合本科生的AI论文网站,千笔AI VS Checkjie!
  • 大模型推理引擎vLLM(9): vLLM 基本代码结构