manim边学边做--局部缩放的场景类

在动画制作中,尤其是数学和科学可视化领域,有时我们需要将观众的注意力集中在场景的某个特定部分。

Manim提供了一个强大的工具 ZoomedScene,它允许我们在场景中创建一个独立的缩放视图,从而实现对局部细节的深入展示。

本文将详细介绍ZoomedScene的作用、参数、方法,并通过实际示例展示其强大功能。

1. ZoomedScene概要

ZoomedSceneManim中一个专门用于局部缩放的场景类。

其核心功能是允许我们在主场景中创建一个独立的"缩放窗口",通过这个窗口,可以清晰地展示场景中某个部分的细节。

这种设计特别适用于以下场景:

  • 数学公式推导 :在展示复杂的数学公式时,可以使用ZoomedScene对公式中的关键部分进行放大,帮助观众更好地理解
  • 科学实验演示:在展示微观现象(如细胞结构、分子运动)时,通过缩放功能,可以让观众更直观地观察细节。
  • 工程设计展示 :对于复杂的机械结构或电路设计,ZoomedScene可以帮助观众聚焦于关键部件
  • 教育动画:在教学视频中,通过局部缩放,可以更有效地引导学生关注重点内容

1.1. 主要参数

ZoomedScene的主要参数有:

参数名称 类型 说明
camera_class class 用于定义场景的相机类,默认为MultiCamera。它决定了场景的渲染方式
zoomed_display_height float 缩放窗口的高度,默认值为 3
zoomed_display_width float 缩放窗口的宽度,默认值为 3
zoomed_display_center array 缩放窗口的中心位置,默认为None,表示自动计算
zoomed_display_corner array 缩放窗口在场景中的角落位置,默认为[1, 1, 0],表示窗口位于右上角
zoomed_display_corner_buff float 缩放窗口与角落的距离,默认值为 0.5
zoomed_camera_config dict 缩放相机的配置参数,例如背景透明度和边框宽度
zoomed_camera_image_mobject_config dict 缩放相机图像的配置参数
zoomed_camera_frame_starting_position array 缩放相机的初始位置,默认为[0, 0, 0]
zoom_factor float 缩放比例,默认值为 0.15。它决定了缩放窗口与主场景的比例关系
image_frame_stroke_width float 缩放窗口边框的宽度,默认值为3
zoom_activated bool 是否激活缩放功能,默认为False

1.2. 主要方法

ZoomedScene的主要方法有:

名称 说明
activate_zooming 激活缩放功能
get_zoom_factor 获取当前的缩放比例
get_zoom_in_animation 返回一个缩放动画
get_zoomed_display_pop_out_animation 返回缩放窗口弹出的动画

2. 使用示例

为了更好地理解ZoomedScene的功能,我们将通过四个实际示例展示其特点。

2.1. 公式的局部放大

视频中展示欧拉公式时,在另一个位置中展示公式的局部放大。

在讲解复杂的公式时,可以使用这个功能来突出显示其中的正在讲解的参数。

python 复制代码
formula = MathTex("e^{i\\pi} + 1 = 0").scale(2)
self.add(formula)
self.activate_zooming(animate=True)
self.wait()
self.play(self.get_zoom_in_animation(run_time=2))

2.2. 不同图形的细节

这个示例交互式切换圆形 / 正方形的局部观察。

python 复制代码
circle = Circle().shift(LEFT)
d1 = Dot(circle.get_center(), radius=0.1, color=RED)
square = Square(color=BLUE).shift(RIGHT)
d2 = Dot(square.get_center(), radius=0.1, color=BLUE)
self.add(circle, square, d1, d2)
self.activate_zooming(animate=True)

# 动态切换缩放目标
f = self.zoomed_camera.frame
self.play(f.animate.move_to(circle))
self.play(self.get_zoom_in_animation())
self.play(f.animate.move_to(square))
self.play(self.get_zoom_in_animation())

2.3. 切换不同的部分

这个示例演示逐步放大图中不同节点的过程。

python 复制代码
nodes = VGroup(
    Dot(color=GREEN),
    Dot(color=YELLOW),
    Dot(color=BLUE),
).arrange(RIGHT, buff=2)
self.add(nodes)
self.activate_zooming(animate=True)

f = self.zoomed_camera.frame
# 多阶段缩放展示
self.play(f.animate.move_to(nodes[0]))
self.play(self.get_zoom_in_animation())
self.play(f.animate.move_to(nodes[1]))

3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(zoom.py),

下载地址: 完整代码 (访问密码: 6872)

相关推荐
多打代码22 分钟前
2025.09.05 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项
python·算法
@CLoudbays_Martin1129 分钟前
为什么动态视频业务内容不可以被CDN静态缓存?
java·运维·服务器·javascript·网络·python·php
程序猿炎义1 小时前
【NVIDIA AIQ】自定义函数实践
人工智能·python·学习
THMAIL1 小时前
深度学习从入门到精通 - BERT与预训练模型:NLP领域的核弹级技术详解
人工智能·python·深度学习·自然语言处理·性能优化·bert
nuclear20112 小时前
Python 实现 Markdown 与 Word 高保真互转(含批量转换)
python·word转markdown·markdown转word·word转md·md转word
山烛2 小时前
深度学习:CNN 模型训练中的学习率调整(基于 PyTorch)
人工智能·pytorch·python·深度学习·cnn·调整学习率
THMAIL2 小时前
深度学习从入门到精通 - 神经网络核心原理:从生物神经元到数学模型蜕变
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
dbdr09013 小时前
Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
linux·运维·服务器·网络·python·学习
花花无缺3 小时前
python自动化-pytest-用例发现规则和要求
后端·python