manim边学边做--局部缩放的场景类
在动画制作中,尤其是数学和科学可视化领域,有时我们需要将观众的注意力集中在场景的某个特定部分。
Manim提供了一个强大的工具 ZoomedScene,它允许我们在场景中创建一个独立的缩放视图,从而实现对局部细节的深入展示。
本文将详细介绍ZoomedScene的作用、参数、方法,并通过实际示例展示其强大功能。
1. ZoomedScene概要
ZoomedScene是Manim中一个专门用于局部缩放的场景类。
其核心功能是允许我们在主场景中创建一个独立的“缩放窗口”,通过这个窗口,可以清晰地展示场景中某个部分的细节。
这种设计特别适用于以下场景:
- 数学公式推导:在展示复杂的数学公式时,可以使用
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. 公式的局部放大
视频中展示欧拉公式时,在另一个位置中展示公式的局部放大。
在讲解复杂的公式时,可以使用这个功能来突出显示其中的正在讲解的参数。
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. 不同图形的细节
这个示例交互式切换圆形 / 正方形的局部观察。
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. 切换不同的部分
这个示例演示逐步放大图中不同节点的过程。
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)
manim边学边做--局部缩放的场景类的更多相关文章
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- 牛腩学Kotlin做Android应用
牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...
- EasyPlayer实现视频播放局部缩放、广角平移功能(类似水滴直播,快手视频)
本文转自:http://blog.csdn.net/jyt0551/article/details/56063869 视频播放局部缩放.广角平移功能 在预览图片的时候,利用手势控制图片的缩放.平移,已 ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- html5-3 html5标签(热点地图如何实现)(边学边做)
html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl 自定义列表dt 自定义标题dd 自定义列表内容 2. ...
- 24小时学通Linux内核--内核探索工具类
寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续 ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- NGUI 做局部2d卷轴
网上找到的都是做整个背景的卷轴动画,通常是改变纹理位置或者背景图片的x坐标 没有提到在UI界面里某个部分做卷轴动画,找了很久,才发现NGUI的Panel里的Clipping属性可以裁剪Panel的大小 ...
- ChartView与LineSeries搭配实现曲线局部缩放功能
效果图: 上一篇文章实现的时候还不知道有QtChart这个模块......好好看了下资料就想做个例子实现一下这功能,比较了下代码量...恩,直接看代码: Rectangle { id: view_re ...
随机推荐
- 【Linux】当初的学习笔记
目录 Linux 笔记 linux基本概念 linux终端四部分 linux的实质 linux系统操作命令 查询用户 who who -H whoami 修改密码 快速切换到用户目录 sshd sys ...
- Qt支持RKMPP硬解的视频监控系统/性能卓越界面精美/实时性好延迟低/录像存储和回放/云台控制
一.前言 之前做的监控系统,已经实现了在windows上硬解码比如dxva2和d3d11va,后续又增加了linux上的硬解vdpau的支持,这几种方式都是跨系统的硬解实现方案,也是就是如果都是win ...
- Qt音视频开发17-vlc内核回调拿图片进行绘制
一.前言 在众多播放器中,支持的种类格式众多,并支持DVD影音光盘,VCD影音光盘及各类流式协议,提供了sdk进行开发,这点是至关重要的,尽管很多优秀的播放器很牛逼,由于没有提供sdk第三方开发,少了 ...
- Qt音视频开发31-Onvif抓拍图片
一.前言 抓拍是个很重要的功能,比如在报警视频联动中需要一张实时的图片,很多SDK不提供抓拍功能,而通过预览抓图,得到的图片已不具有实时性,那如何得到实时的图片呢?现在的IPC基本上都支持ONVIF协 ...
- 古早的遗传算法碰到LLM->😊AutoDAN Generating Stealthy Jailbreak Prompts on💗Aligned Large Language Models
师兄推给我的一篇ICLR,抽出时间阅读整理了附录前的内容 这次没有完全翻译,因为我想组会上分享,转成自己的话 禁止盗用,侵权必究!!!欢迎大家积极举报
- PostgreSQL 数据库的启动与停止管理
title: PostgreSQL 数据库的启动与停止管理 date: 2024/12/28 updated: 2024/12/28 author: cmdragon excerpt: 作为一个强大的 ...
- Python 进阶:深入理解 import 机制与 importlib 的妙用
大家好,今天我们来深入探讨 Python 中的导入机制和 importlib 模块.相信不少朋友和我一样,平时写代码时可能只用过最基础的 import 语句,或者偶尔用 importlib.impor ...
- (八).NET6.0添加通用的Redis功能
1.添加包:StackExchange.Redis 2.在配置文件里面,新建Redis的有关配置信息 Name是别名,可以任意起.Ip是Redis的服务端地址,例如安装本地,就是127.0.0.1,端 ...
- CDS标准视图:ABC标识文本 I_ABCIndicatorText
视图名称:ABC标识文本 I_ABCIndicatorText 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'ABC Indicator - Text' @V ...
- Word文档转换成Html格式
CentOS 下安装 OpenOffice4.0 一.更新服务器 yum源 [root@APP2 /]# yum clean all [root@APP2 /]# yum makecache [roo ...