王柳 发表于 2025-1-16 12:39:31

manim边做边学--缩放变更

使用 Manim 进行动画创作时,缩放变更是一项强大且实用的功能。
当我们处理惩罚复杂的科学模子可视化、数学原理演示时,缩放变更可以帮助我们在不改变元素位置关系的基础上,突出关键信息,引导观众聚焦于特定的细节。
好比在数学教学动画中,通过对几何图形的缩放,可以清楚地展示图形的比例变化与性子特征。
本篇将介绍Manim中的两个用于缩放变更的类:

[*]ScaleInPlace:用于原地的缩放强调,偏重于对象巨细的改变而位置不变
[*]ShrinkToCenter:偏重于将对象向屏幕中心紧缩直至消失,适用于场景转换、元素移除等
1. 动画概述

1.1. ScaleInPlace

当你想要强调某个对象的放大或缩小效果,同时保持该对象在原位置进行缩放操纵时,可以使用 ScaleInPlace。
例如,在讲解数学公式的推导过程中,需要突出表现某个公式的一部分,你可以将这部分进行原地缩放,以吸引观众的注意力。
它也适用于一些元素的局部放大展示,使观众能更清楚地看到细节。
该类实现的是原地缩放效果,对象的中心点不会发生位移,仅在巨细上进行缩放。
可以通过调解缩放比例来控制缩放的水平,可以或许灵活地将对象放大或缩小到所需的尺寸。
它的参数重要有:
参数名称类型阐明mobjectMobject要进行缩放操纵的对象scale_factorfloat缩放比例因子1.2. ShrinkToCenter

ShrinkToCenter得当用于物体消失时的动画效果,它能让对象从当前巨细逐渐缩小直至消失在屏幕的中心位置。
例如,在展示一个元素被移除或销毁的过程中,ShrinkToCenter 可以生动地表现出该元素被 “收纳” 或 “吸收” 到屏幕中心的效果。
对于一些具有层级关系的元素,假如想要表现下层元素被上层元素吸收或覆盖时,也可以使用 ShrinkToCenter 让下层元素平滑地紧缩到中心,模仿这种层级覆盖的视觉感受。
该类的特点是对象在紧缩过程中向屏幕中心紧缩,给人一种被 “吸进” 屏幕中心的视觉效果。
它的动画过程是渐进的,会逐渐缩小对象,直到对象完全消失或到达最小尺寸(可根据设置),这个过程的视觉效果可以根据持续时间和缩放速度的设置而有所不同。
它的参数重要有:
参数名称类型阐明mobjectMobject要进行向中心紧缩操纵的对象2. 使用示例

ScaleInPlace和ShrinkToCenter使用起来比较简单直观,也没有什么复杂的参数。
下面的示例重要演示在哪些实际的场景中可以使用这两个类。
2.1. 原子核的展示

这个示例创建了一个代表原子核的蓝色圆形。
先将其表现,随后使用 ScaleInPlace 动画将其放大 3 倍,以此突出原子核,帮助观众更清楚地关注意点内容。
nucleus = Circle(
    radius=0.5,
    fill_opacity=1,
    color=BLUE,
)
self.play(Create(nucleus))
self.wait()
# 放大原子核,使其更加突出
self.play(ScaleInPlace(nucleus, 3))https://img2024.cnblogs.com/blog/83005/202501/83005-20250116113649465-1681027993.gif
2.2. Logo的展示

这个示例针对公司 logo 展示场景,通过 ImageMobject 加载 logo 并设为 0.5 倍初始巨细后淡入。
等待 1 秒,使用 ScaleInPlace 动画将 logo 放大 3 倍,从而在开场时吸引观众目光。
logo = ImageMobject("./common/亚原logo.jpg")
logo.scale(0.5)# 初始缩放比例
self.play(FadeIn(logo))
self.wait()
# 放大 logo 以吸引观众的注意力
self.play(ScaleInPlace(logo, 3))https://img2024.cnblogs.com/blog/83005/202501/83005-20250116113649406-1855237358.gif
2.3. 游戏中的生命值

这个示例演示在游戏竣事的情境下,创建红色正方形代表生命值方块。
先表现出来,1 秒后使用 ShrinkToCenter 动画使其紧缩至中心消失,模仿了生命值丧失的效果。
life_block = Square(
    side_length=2,
    fill_opacity=0.6,
    color=RED,
)
self.play(Create(life_block))
self.wait()
# 让生命值方块收缩到中心消失,模拟失去生命值的效果
self.play(ShrinkToCenter(life_block))https://img2024.cnblogs.com/blog/83005/202501/83005-20250116113649408-321095678.gif
2.4. 提示消息的消失

这个示例演示了信息提示场景,先创建白色文本作为提示信息并写出。
等待 2 秒后,运用 ShrinkToCenter 动画让文本紧缩至中心消失,实现了提示信息自然消失的动画效果。
s = "这个一个提示信息"
info_text = Text(
    f"{s} !",
    t2g={s: },
)
self.play(Write(info_text))
self.wait()
# 使提示文本收缩至中心消失
self.play(ShrinkToCenter(info_text))https://img2024.cnblogs.com/blog/83005/202501/83005-20250116113649442-1572539327.gif
3. 附件

文中的代码只是关键部分的截取,完备的代码共享在网盘中(scale.py),
下载地点: 完备代码 (访问暗码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: manim边做边学--缩放变更