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

打印 上一主题 下一主题

主题 992|帖子 992|积分 2976

在动画制作中,尤其是数学和科学可视化领域,有时我们需要将观众的注意力会合在场景的某个特定部门。
Manim提供了一个强大的工具 ZoomedScene,它允许我们在场景中创建一个独立的缩放视图,从而实现对局部细节的深入展示。
本文将具体先容ZoomedScene的作用、参数、方法,并通过实际示例展示其强大功能。
1. ZoomedScene概要

ZoomedScene是Manim中一个专门用于局部缩放的场景类。
其核心功能是允许我们在主场景中创建一个独立的“缩放窗口”,通过这个窗口,可以清晰地展示场景中某个部门的细节。
这种计划特别实用于以了局景:

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

ZoomedScene的重要参数有:
参数名称类型阐明camera_classclass用于界说场景的相机类,默认为MultiCamera。它决定了场景的渲染方式zoomed_display_heightfloat缩放窗口的高度,默认值为 3zoomed_display_widthfloat缩放窗口的宽度,默认值为 3zoomed_display_centerarray缩放窗口的中心位置,默认为None,表示自动计算zoomed_display_cornerarray缩放窗口在场景中的角落位置,默认为[1, 1, 0],表示窗口位于右上角zoomed_display_corner_bufffloat缩放窗口与角落的距离,默认值为 0.5zoomed_camera_configdict缩放相机的设置参数,例如配景透明度和边框宽度zoomed_camera_image_mobject_configdict缩放相机图像的设置参数zoomed_camera_frame_starting_positionarray缩放相机的初始位置,默认为[0, 0, 0]zoom_factorfloat缩放比例,默认值为 0.15。它决定了缩放窗口与主场景的比例关系image_frame_stroke_widthfloat缩放窗口边框的宽度,默认值为3zoom_activatedbool是否激活缩放功能,默认为False1.2. 重要方法

ZoomedScene的重要方法有:
名称阐明activate_zooming激活缩放功能get_zoom_factor获取当前的缩放比例get_zoom_in_animation返回一个缩放动画get_zoomed_display_pop_out_animation返回缩放窗口弹出的动画2. 使用示例

为了更好地明白ZoomedScene的功能,我们将通过四个实际示例展示其特点。
2.1. 公式的局部放大

视频中展示欧拉公式时,在另一个位置中展示公式的局部放大。
在解说复杂的公式时,可以使用这个功能来突出表现其中的正在解说的参数。
  1. formula = MathTex("e^{i\\pi} + 1 = 0").scale(2)
  2. self.add(formula)
  3. self.activate_zooming(animate=True)
  4. self.wait()
  5. self.play(self.get_zoom_in_animation(run_time=2))
复制代码

2.2. 不同图形的细节

这个示例交互式切换圆形 / 正方形的局部观察。
  1. circle = Circle().shift(LEFT)
  2. d1 = Dot(circle.get_center(), radius=0.1, color=RED)
  3. square = Square(color=BLUE).shift(RIGHT)
  4. d2 = Dot(square.get_center(), radius=0.1, color=BLUE)
  5. self.add(circle, square, d1, d2)
  6. self.activate_zooming(animate=True)
  7. # 动态切换缩放目标
  8. f = self.zoomed_camera.frame
  9. self.play(f.animate.move_to(circle))
  10. self.play(self.get_zoom_in_animation())
  11. self.play(f.animate.move_to(square))
  12. self.play(self.get_zoom_in_animation())
复制代码

2.3. 切换不同的部门

这个示例演示逐步放大图中不同节点的过程。
  1. nodes = VGroup(
  2.     Dot(color=GREEN),
  3.     Dot(color=YELLOW),
  4.     Dot(color=BLUE),
  5. ).arrange(RIGHT, buff=2)
  6. self.add(nodes)
  7. self.activate_zooming(animate=True)
  8. f = self.zoomed_camera.frame
  9. # 多阶段缩放展示
  10. self.play(f.animate.move_to(nodes[0]))
  11. self.play(self.get_zoom_in_animation())
  12. self.play(f.animate.move_to(nodes[1]))
复制代码

3. 附件

文中的代码只是关键部门的截取,完整的代码共享在网盘中(zoom.py),
下载地址: 完整代码 (访问密码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表