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

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

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

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

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

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

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

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

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,像说话一样自然!

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更稳定可靠
  • ✅ 动画构建更直观
  • ✅ 代码质量更高
  • ✅ 文档更完善
  • ✅ 可复现的随机效果
http://www.jsqmd.com/news/589621/

相关文章:

  • 手机拍夜景总糊?试试这个‘零成本’的AI增强方案:Retinex与Zero-DCE原理大白话解读
  • 2026年知名的水处理玻璃钢树脂罐/水处理罐深度厂家推荐 - 品牌宣传支持者
  • OpenClaw+Qwen3-14b_int4_awq:科研文献自动摘要与分类系统
  • Multisim新手入门:用74LS90芯片和数码管,5分钟搭一个八进制计数器(附仿真文件)
  • OpenClaw故障排查大全:Phi-3-vision-128k-instruct接口连接异常解决方案
  • 嵌入式Boa Web服务器搭建与优化指南
  • 飞书机器人接入指南:OpenClaw调用千问3.5-27B实现智能问答
  • 2024国赛数学建模E题实战解析:黄河水沙监测数据建模与预测
  • ALIGN vs CLIP:哪个更适合你的多模态项目?详细对比与选型指南
  • OpenClaw多模型切换指南:Qwen3-4B与Llama3混合调用策略
  • Stm32f103c8t6(proteus仿真)进阶——PWMI模式实现高精度频率与占空比测量
  • 网站 SEO 检测报告如何与网站分析数据进行对比分析_网站 SEO 检测报告中的页面结构分析有什么用
  • OpenClaw+Qwen2.5-VL-7B:低成本自动化学习助手
  • Kmestepper:单头称重控制系统嵌入式协同驱动框架
  • ESP32S3+LVGL+SquareLine_Studio:从UI设计到屏幕驱动的全流程实战
  • Adafruit micro:bit库深度解析:Arduino嵌入式开发实战
  • OpenClaw长期运行维护:Qwen3.5-9B-AWQ-4bit内存泄漏监控
  • OpenClaw技能开发入门:为Qwen3.5-9B定制图片分类插件
  • OpenClaw跨平台控制:千问3.5-35B-A3B-FP8任务手机端触发方案
  • 从CVE-2025-29927看Next.js中间件递归校验机制的攻防博弈
  • STM32F103C8T6流水灯实战:从寄存器配置到波形分析(C与汇编双版本)
  • LIS(最长上升子序列)超全解析
  • OpenClaw浏览器自动化:Qwen3-32B镜像操控Chrome实战
  • 一文详解如何使用PHP进行正则表达式匹配
  • BCompare不止于代码:手把手教你用它做合同定稿、论文修订的文档对比神器
  • 学术海报自动生成:OpenClaw+Phi-3-vision科研工作流实践
  • 2026年沈阳正规的汽车贴膜实体店有哪些,汽车膜/玻璃膜/汽车贴膜/沈北贴膜/太阳膜/贴车衣,汽车贴膜专业店联系方式 - 品牌推荐师
  • 资源监控方案:OpenClaw+Qwen3-14B的GPU显存预警系统
  • OpenClaw+Phi-3-mini-128k-instruct个人知识库:自动整理收藏网页
  • OpenClaw+Qwen3.5-9B低成本运营:个人自媒体内容自动化生产