Manim v0.19.1 发布啦!三大新特性让动画制作更丝滑

大家好!Manim 社区刚刚发布了 v0.19.1 版本(发布于 12 月 1 日)。虽然这是一个小版本号更新,但里面可是藏着几个非常实用的新功能!

无论你是刚入坑的新手,或者已经被某些痛点折磨过的老手,这篇更新速览都值得一看。

1. 🌟 亮点一:终于可以“固定”随机颜色了!

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

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

🌰 代码示例

/* by 01022.hk - online tools website : 01022.hk/zh/deencrypt.html */
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)

现在则直接乘这就行了!

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

🌰 代码示例

/* by 01022.hk - online tools website : 01022.hk/zh/deencrypt.html */
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也很简单,打开终端/命令行,输入:

pip install --upgrade manim

快去试试新功能吧!如果你用新特性做出了好玩的动画,欢迎在社区分享哦。

【无线传感器】使用 MATLAB和 XBee连续监控温度传感器无线网络研究(Matlab代码实现)内容概要:本文围绕使用MATLAB和XBee技术实现温度传感器无线网络的连续监控展开研究,介绍了如何构建无线传感网络系统,并利用MATLAB进行数据采集、处理与可视化分析。系统通过XBee模块实现传感器节点间的无线通信,实时传输温度数据至主机,MATLAB负责接收并处理数据,实现对环境温度的动态监测。文中详细阐述了硬件连接、通信协议配置、数据解析及软件编程实现过程,并提供了完整的MATLAB代码示例,便于读者复现和应用。该方案具有良好的扩展性和实用性,适用于远程环境监测场景。; 适合人群:具备一定MATLAB编程基础和无线通信基础知识的高校学生、科研人员及工程技术人员,尤其适合从事物联网、传感器网络相关项目开发的初学者与中级开发者。; 使用场景及目标:①实现基于XBee的无线温度传感网络搭建;②掌握MATLAB与无线模块的数据通信方法;③完成实时数据采集、处理与可视化;④为环境监测、工业测控等实际应用场景提供技术参考。; 阅读建议:建议读者结合文中提供的MATLAB代码与硬件连接图进行实践操作,先从简单的点对点通信入手,逐步扩展到多节点网络,同时可进一步探索数据滤波、异常检测、远程报警等功能的集成。
内容概要:本文系统讲解了边缘AI模型部署与优化的完整流程,涵盖核心挑战(算力、功耗、实时性、资源限制)与设计原则,详细对比主流边缘AI芯片平台(如ESP32-S3、RK3588、Jetson系列、Coral等)的性能参数与适用场景,并以RK3588部署YOLOv8为例,演示从PyTorch模型导出、ONNX转换、RKNN量化到Tengine推理的全流程。文章重点介绍多维度优化策略,包括模型轻量化(结构选择、输入尺寸调整)、量化(INT8/FP16)、剪枝与蒸馏、算子融合、批处理、硬件加速预处理及DVFS动态调频等,显著提升帧率并降低功耗。通过个实战案例验证优化效果,最后提供常见问题解决方案与未来技术趋势。; 适合人群:具备一定AI模型开发经验的工程师,尤其是从事边缘计算、嵌入式AI、计算机视觉应用研发的技术人员,工作年限建议1-5年;熟悉Python、C++及深度学习框架(如PyTorch、TensorFlow)者佳。; 使用场景及目标:①在资源受限的边缘设备上高效部署AI模型;②实现高帧率与低功耗的双重优化目标;③掌握从芯片选型、模型转换到系统级调优的全链路能力;④解决实际部署中的精度损失、内存溢出、NPU利用率低等问题。; 阅读建议:建议结合文中提供的代码实例与工具链(如RKNN Toolkit、Tengine、TensorRT)动手实践,重点关注量化校准、模型压缩与硬件协同优化环节,同时参考选型表格匹配具体应用场景,并利用功耗监测工具进行闭环调优。
为了让动画、减少卡顿感,可以从以下几个方面进行优化: ### 1. **硬件加速** 使用 GPU 加速可以让动画加流畅。通过设置 `transform` 和 `opacity` 属性,浏览器会自动利用 GPU 进行渲染。避免对宽度 (`width`)、高度 (`height`) 或位置 (`left`, `top`) 等属性进行修改,因为这可能会导致性能下降。 #### 示例代码: ```css .headBox, .icon { animation: fadeIn 2s ease-in-out forwards; backface-visibility: hidden; /* 强制启用硬件加速 */ will-change: transform, opacity; /* 提前告知浏览器哪些属性会发生变化 */ } ``` --- ### 2. **选择合适的缓动函数 (Easing Function)** 默认的 `ease-in-out` 已经比较平,但如果想要高级的效果,可以尝试其他缓动曲线(如贝塞尔曲线)来自定义过渡效果。 #### 自定义缓动示例: ```css @keyframes fadeIn { from { opacity: 0; transform: scale(0.5); } to { opacity: 1; transform: scale(1); } } .headBox, .icon { animation: fadeIn 2s cubic-bezier(0.4, 0, 0.2, 1) forwards; /* 柔和的缓动效果 */ } ``` 这里我们使用了一个预设的贝塞尔曲线值 `(0.4, 0, 0.2, 1)` ,也可以根据需求自行调整。 --- ### 3. **帧率优化** 确保你的设备支持较高的刷新频率,并尽量保持 CSS 动画在 60fps 上下运行。可以通过 Chrome 开发工具中的 Performance 面板查看 FPS 数据并分析瓶颈所在之处。 另外注意不要频繁地触发重绘操作,尤其是对于那些需要不断新样式的元素来说尤为重要;同时也要留意是否有不必要的布局抖动现象发生。 --- ### 4. **减小图像资源体积** 如果你正在处理包含大图片或视频在内的富媒体内容,则应考虑压缩文件大小以加快加载速度,从而间接提高整个页面包括其中动画部分的表现质量. --- ### 最终版本完整代码 ```css /* 添加入场动画 */ @keyframes fadeIn { from { opacity: 0; transform: translateY(-30px) scale(0.8); // 结合位移+缩放创造立体感 } to { opacity: 1; transform: translateX(0) scale(1); } } .headBox , .icon{ animation: fadeIn 1.5s cubic-bezier(.79,.14,.15,.86) both; backface-visibility:hidden ; will-change : transform , opacity ; } body { overflow-x:hidden;//防止滚动条干扰体验 } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值