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

画出动态数学」:让数学可视化触手可及的Manim入门课2025-11-0722.让你的动画“活”过来:Manim 节奏控制指南 (Rate Functions)2025-11-2323.M

以前我们在使用random_color()时,最大的痛点就是:每次运行脚本,生成的颜色都不一样!
有时候你觉得这次随机出来的配色方案简直完美,结果改了一行无关代码再渲染,配色变了……心态直接崩了有没有?

v0.19.1中,random_color()终于支持seed(随机种子)参数了!这意味着你可以通过指定种子,让随机颜色变得“确定”。

🌰 代码示例

from manim import * class DeterministicColors(Scene): def construct(self): # 以前:每次运行颜色都可能不同 # circle = Circle(color=random_color()) # 现在:指定 seed=1,无论运行多少次,它永远是同一个颜色! rnd = RandomColorGenerator(seed=1) dot_a = Dot(radius=1, color=rnd.next()) dot_a.shift(LEFT * 2) # 即使在不同的地方调用,只要种子一样,颜色就一样 dot_b = Dot(radius=1, color=rnd.next()) dot_b.shift(RIGHT * 2) self.play(Create(dot_a), Create(dot_b)) self.wait()

只要seed的值一样,每次的随机的颜色都一样。

这对于制作系列视频或者调试配色时简直是救命稻草。

2. 🌟 亮点二:ValueTracker 终于学会算术了

ValueTracker是 Manim 中做动态数值动画的核心。但以前它有点“笨”,不能直接参与加减乘除。

比如你想让一个tracker的值翻倍,以前你得写t.set_value(t.get_value() * 2)

现在则直接乘这就行了!

新版本支持+,-,*,/,//,%,**等常见运算符。

🌰 代码示例

from manim import * class SmartTracker(Scene): def construct(self): tracker = ValueTracker(2) number = DecimalNumber() number.add_updater(lambda m: m.set_value(tracker.get_value())) self.add(number) # 以前的写法(现在依然可用,但比较繁琐) # self.play(tracker.animate.set_value(tracker.get_value() + 5)) # v0.19.1 的新玩法:直接对对象进行操作 # 注意:这里展示的是逻辑上的简化,在非 animate 场景下处理数据更方便 # 比如我们在循环中处理数据逻辑时: tracker += 5 # tracker 的内部值现在变成了 7 self.wait() # 甚至可以进行更复杂的运算 tracker *= 2 # 变成 14 self.wait() # 注意:如果你要用 animate 动画过渡,还是推荐用 .animate.set_value() # 但这个特性让编写复杂的 updater 逻辑或者预计算变得非常爽。

代码又可以少写几行get_value()了,清爽度 +1。

3. 🌟 亮点三:新增TangentialArc(切线弧)

这是几何绘图的新玩具!以前如果想画一段圆弧,既要连接两个点,又要保证切线方向平滑,可能需要费点脑筋去算角度。

新的TangentialArc旨在简化这类几何构造。

目前官方文档还在完善中,但它的出现意味着我们可以更容易地画出流畅连接直线或曲线的圆弧了。

🌰 代码场景

如果你有一条直线,想在末端接一个圆弧,且连接处要是“丝滑”的(切线连续)。

以前你得算切角,现在可以试试使用TangentialArc

class TangentialArcSample(Scene): def construct(self): l1 = Line([0, 3, 0], [1, 2, 0], color=RED) l2 = Line([-2, 3, 0], [1, 2, 0], color=BLUE) # 创建切圆弧对象 # 参数说明: # - l1: 第一条切线 # - l2: 第二条切线 # - radius: 圆弧的半径(0.2) # - corner: 圆弧所在的角落方向 # - color: 圆弧的颜色(绿色) circulararc = TangentialArc(l1, l2, radius=0.2, corner=(-1, -1), color=GREEN) self.play(Create(l1), Create(l2)) self.play(Create(circulararc)) self.wait()

4. 🛠️ 其他值得关注的变化

除了上面三个新特性,还有一些改动也非常贴心:

  1. SurroundingRectangle 更灵活了
    以前buff参数只能是一个数字,导致矩形框的四周留白必须一样。现在你可以传入一个元组buff=(0.5, 0.1),分别控制水平垂直方向的间距。给长公式加框时再也不用担心左右太宽或者上下太挤了!
  2. Code Mobject 支持 OpenGL
    如果你是用 OpenGL 渲染模式(渲染速度超快的那种)的用户,现在Code对象也能完美显示了。
  3. 修复了 Tex 环境格式化问题
    LaTeX公式时如果不小心换行或者格式乱了,现在Manim能更好地处理它,报错更少。
  4. CLI 默认分辨率调整
    命令行工具的默认分辨率逻辑进行了一些微调,更加符合 1080p 的标准预期。

5. 📝 总结与升级

这次v0.19.1虽然版本号跨度不大,但每一个改动都切中了实际开发中的痛点。

特别是随机种子ValueTracker 算术支持,属于那种“用了就回不去”的优化。

升级Manim也很简单,打开终端/命令行,输入:

http://www.cnnetsun.cn/news/3076465.html

相关文章:

  • 信息学奥赛一本通提高篇刷题路线图:从贪心到博弈论,如何高效攻克这1670道题?
  • VSCode Remote SSH 中 Codex 连接超时的排查与解决记录
  • 新手买翡翠避坑指南:7个可落地的“硬核”核对标准
  • One API:用一套接口调遍所有大模型
  • 死磕Spring Boot Validation校验
  • 一句话讲透向量数据库:它把“语义相似“变成了可计算的东西
  • 快速替换文本中的上下标
  • 项目包含项目源码、项目文档、数据库脚本、软件工具等资料;
  • 2024年最全Minecraft矿石透视模组指南:Advanced XRay从零配置到高效挖矿
  • key 为出现的数字, value 为该数字出现的次数。遍历⾥⾯所有的数字,如果 hashmap 中存在,那么 value (次数)+1,如果 hashmap 中不存在,那么 value 置为1。
  • .算数操作符
  • AI编程Token成本将与开发者薪资持平,企业如何应对?
  • 报错解决org.springframework.web.method.annotation Failed to convert value of type ‘java.lang.String‘ to
  • ESP32 + 传感器:手把手教你做土壤监测终端
  • 微信小程序:农户手机上的「农场管家」
  • 自动灌溉系统:AI 什么时候浇水,比老农还准?
  • 批量处理远程共享目录中的特定类型文件(如 .hex、.csv 等)。
  • OpenGL学习笔记-05-着色器-数据类型/输入输出/uniform
  • 基于OpenCV与YOLO的实时目标检测系统搭建指南
  • Docker部署PostgreSQL
  • Playwright混沌工程实战:构建AI增强的韧性Web自动化测试体系
  • 【LeetCode】反转字符串
  • 京东开源实时视频视觉语言交互模型:全栈方案解析与落地实践
  • 智能体颠覆安全-360图龙锋如何用蜂群路线打造中国版Mythos
  • Java 26 发布了, 我人麻了。。
  • 玩三角洲要高配?2026年这5款旗舰游戏本让你杀穿新赛季
  • AI模型门控发布机制解析:原理、实践与行业应用
  • 2026全球EMBA客观测评:科学选型与优质项目解析
  • 工程师转型AI:从跑通Demo到收藏实战秘籍,拒绝高数劝退!
  • 微信聊天记录备份终极指南:如何安全保护你的数字记忆