English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french
查看: 2|回复: 0

manim边学边做--突出显示

[复制链接]
查看: 2|回复: 0

manim边学边做--突出显示

[复制链接]
查看: 2|回复: 0

354

主题

0

回帖

1072

积分

金牌会员

积分
1072
qq5464642

354

主题

0

回帖

1072

积分

金牌会员

积分
1072
2025-2-7 01:13:47 | 显示全部楼层 |阅读模式
本篇介绍Manim中用于突出显示某些内容的动画类,主要包括:

  • ApplyWave:让图形或文字产生连续波浪式变形的动画类,用于展示波动效果,参数可调节
  • Circumscribe:用于在几何场景中展示图形与其外接图形的关系,动画围绕对象生成外接图形
  • Flash:通过快速改变对象视觉属性产生闪烁效果,用于强调对象,闪烁参数可自定义
  • FocusOn:能模拟相机聚焦,引导观众关注特定对象,可设置聚焦速度、缩放比例等参数
  • Indicate:以箭头、线条等方式指示对象部分或步骤,自定义指示形状、颜色和动态效果
  • ShowPassingFlash:在对象移动路径上留下短暂闪光,用于体现快速经过的场景,闪光参数可控
  • Wiggle:使对象在原始位置附近小幅度随机晃动,用于模拟不稳定状态,晃动参数能够调整
1. 动画概述

1.1. ApplyWave

ApplyWave以一种连续、流畅的方式使对象产生波浪式的变形。
可以控制波浪的幅度、频率等参数,通过调整这些参数能够创造出不同强度和风格的波浪效果。
这种变形效果是基于对象的几何形状进行计算的,所以对于复杂形状的对象也能很好地应用,并且能够保证变形过程的平滑性。
它在制作一些具有动态美感的数学函数图像演示或者波动现象(比如物理中的波的传播)时非常有用,
也可以用于文字,使文字产生一种类似在水面上波动的视觉效果,用于一些创意动画的标题展示等场景。
它的主要参数有:
参数名称类型说明mobjectMobject要进行变形的 Mobject对象directionnp.ndarray波浪推动形状点的方向amplitudefloat形状点移动的距离wave_funcfunc定义一个波峰形状的函数time_widthfloat波浪相对于 mobject 宽度的长度ripplesint波浪的波纹数量1.2. Circumscribe

Circumscribe着重于突出对象与其外接图形的关系。
动画过程通常是围绕着目标对象生成外接图形,并且可以设置动画的速度和精度。
在生成外接图形的过程中,会根据对象的几何特征来确定外接图形的位置和大小,以确保准确地表现外接的概念。
它主要用于展示图形与外接图形之间的关系。
比如在讲解三角形的外接圆时,可以使用这个动画效果,清晰地展示圆是如何围绕三角形并通过其三个顶点的。
此外,对于一些有外接几何形状概念的其他图形(如四边形的外接椭圆等)也可以使用,能够直观地帮助观众理解外接这一几何关系。
它的主要参数有:
参数名称类型说明mobjectMobject要进行环绕绘制的 Mobject对象shapeType用于环绕给定 Mobject 的形状,只能是矩形(Rectangle)或圆形(Circle)fade_inbool是否使环绕形状淡入fade_outbool是否使环绕形状淡出time_widthfloat绘制和擦除的时间宽度bufffloat环绕形状与给定 Mobject 之间的距离colorColor环绕形状的颜色1.3. Flash

Flash的特点是快速地改变对象的颜色或透明度等视觉属性来产生闪烁效果,
可以自定义闪烁的次数、频率和颜色变化方式。
当需要强调某个对象或者对象的某个部分时Flash非常有用。
例如,在展示一个复杂的数学模型中的关键元素,或者在一个化学分子结构中突出特定的原子或化学键时,可以使用Flash来吸引观众的注意力。
它的主要参数有:
参数名称类型说明pointndarray / Mobject闪烁线条的中心点。如果传入的是Mobject,则使用其中心作为中心点line_lengthfloat闪烁线条的长度num_linesint闪烁线条的数量flash_radiusfloat闪烁线条开始的距离点line_stroke_widthint闪烁线条的笔触宽度colorColor闪烁线条的颜色time_widthfloat闪烁线条的时间宽度1.4. FocusOn

FocusOn能够模拟相机聚焦的效果,将画面的中心或者重点转移到目标对象上,
可以设置聚焦的速度、缩放比例等参数,使聚焦过程更加自然。
它可用于在复杂的场景或者包含多个对象的动画中,引导观众关注特定的区域或对象。
它的主要参数有:
参数名称类型说明focus_pointndarray / Mobject聚光灯收缩到的点。如果传入的是Mobject,则使用其中心作为收缩点opacityfloat聚光灯的不透明度colorColor聚光灯的颜色1.5. Indicate

Indicate通常会以箭头、线条或者颜色变化等方式来指示目标,
可以自定义指示的形状、颜色和动态效果(如箭头的摆动、线条的闪烁等)。
这种指示效果是比较明确的,能够直接引导观众的视线到需要关注的地方,并且可以与其他动画效果结合使用,增强指示的效果。
它在教学动画中经常使用,用于指示对象的某个部分或者强调某个操作步骤。
它的主要参数有:
参数名称类型说明mobjectMobject要突出显示的 Mobjectscale_factorfloatMobject 突出显示时缩放的比例因子colorColorMobject 突出显示的颜色1.6. ShowPassingFlash

ShowPassingFlash主要是在对象移动的路径上留下短暂的闪光效果,模拟物体快速通过时的光影变化,
可以控制闪光的颜色、持续时间和强度等参数,以适应不同的场景需求。
它一般用于表现对象的短暂出现或者快速通过的场景。
它的主要参数有:
参数名称类型说明mobjectVMobject要应用此动画效果的对象time_widthfloat相对于笔画长度中闪光部分的长度,该参数控制了每一帧中显示的对象部分的大小比例1.7. Wiggle

Wiggle能够使对象在其原始位置附近进行小幅度的随机晃动,可以调整晃动的幅度、频率和方向等参数。
晃动效果看起来比较自然,不是那种规则的运动,能够很好地模拟出不稳定或者颤抖的状态,而且不会让对象偏离其原始位置太远,保持了一定的整体稳定性。
它用于给对象添加一种不稳定、轻微晃动的效果。
它的主要参数有:
参数名称类型说明mobjectMobject要摆动的Mobject对象scale_valuefloatMobject 摆动时缩放的比例因子rotation_anglefloat摆动角度n_wigglesint摆动次数scale_about_pointndarrayMobject 缩放的中心点rotate_about_pointndarrayMobject 旋转的中心点2. 使用示例

下面通过示例来演示各个突出显示类动画的使用。
2.1. ApplyWave 示例

首先创建一个文本对象Text,然后分别演示 ApplyWave 不同参数的设置效果。

  • 第一次使用默认参数,展示基本的波浪变形效果
  • 第二次指定了方向为向右(RIGHT)、时间宽度为 0.5、振幅为 0.3,观察这些参数对动画的影响
  • 第三次设置了速率函数为线性(linear)和波纹数量为 4,查看线性速率和波纹数量下的效果。
  • 第四次设置了速率函数为非线性(rush_into)和波纹数量为 4,查看非线性速率和波纹数量下的效果
# 创建一个文本对象t = Text("Hello, Manim!").scale(1.5)self.add(t)# 默认参数的ApplyWaveself.play(ApplyWave(t))self.wait()# 指定方向 时间宽度和振幅的ApplyWaveself.play(    ApplyWave(        t,        direction=RIGHT,        time_width=0.5,        amplitude=0.3,    ),)self.wait()# 线性波纹self.play(    ApplyWave(        t,        rate_func=linear,        ripples=4,    ),)self.wait()# 非线性波纹self.play(    ApplyWave(        t,        wave_func=rush_into,        ripples=4,    ),)
2.2. Circumscribe 示例

首先创建一个矩形,然后针对矩形分别演示了Circumscribe的不同参数设置效果。
比如默认参数、指定形状为圆形、淡入、淡出、以及Circumscribe与矩形的间隔buff等等。
# 创建一个矩形rect = Rectangle(width=3, height=2)self.add(rect)# 默认参数的Circumscribeself.play(Circumscribe(rect))self.wait()# 指定形状为圆形的Circumscribeself.play(Circumscribe(rect, Circle))self.wait()# 淡入效果self.play(    Circumscribe(        rect,        fade_in=True,        buff=0.1,        color=RED,    ))self.wait()# 淡出效果self.play(    Circumscribe(        rect,        fade_out=True,        buff=0.3,        color=GREEN,    ))
2.3. Flash 示例

首先创建一个和一个,然后针对分别演示了 Flash 的不同参数设置效果。
对于,展示了默认参数的 Flash 效果;
对于,依次展示了指定线条长度数量颜色起始半径线条宽度时间宽度、和速率函数等参数的效果。
# 创建一个点和一个圆dot = Dot().shift(UP * 2)circle = Circle(radius=1)self.add(dot, circle)# 默认参数Flashself.play(Flash(dot))self.wait()# 指定线条长度 数量和颜色的Flashself.play(    Flash(        circle,        line_length=0.5,        num_lines=20,        color=YELLOW,    ))self.wait()# 指定起始半径和线宽度的Flashself.play(    Flash(        circle,        line_stroke_width=5,        flash_radius=1.5,    ))self.wait()# 指定速率函数的Flashself.play(    Flash(        circle,        rate_func=rush_into,        time_width=2,    ))
2.4. FocusOn 示例

首先创建一个正方形,然后针对正方形分别演示了FocusOn的不同参数设置效果。
除了默认参数,还展示指定不透明度和指定颜色的效果。
# 创建一个正方形和一个三角形square = Square()self.add(square)# 默认参数的FocusOnself.play(FocusOn(square))self.wait()# 指定不透明度的FocusOnself.play(FocusOn(square, opacity=0.8))self.wait()# 指定颜色的FocusOnself.play(FocusOn(square, color=RED))
2.5. Indicate 示例

首先创建一个文本对象和一个圆形,然后针对文本圆形分别演示Indicate的不同参数设置效果。
比如指定缩放比例因子、指定颜色,以及指定速率函数的效果。
# 创建一个文本对象和一个圆形text = Text("Indicate Me!").shift(UP * 2)circle = Circle(radius=1)self.add(text, circle)# 默认参数的Indicateself.play(Indicate(text), Indicate(circle))self.wait()# 指定缩放比例因子的Indicateself.play(    Indicate(text, scale_factor=1.5),    Indicate(circle, scale_factor=1.5),)self.wait()# 指定颜色的Indicateself.play(    Indicate(text, color=GREEN),    Indicate(circle, color=BLUE),)self.wait()# 不同速率函数的Indicateself.play(    Indicate(text, rate_func=there_and_back),    Indicate(circle, rate_func=there_and_back_with_pause),)
2.6. ShowPassingFlash 示例

先创建一个正五边形,然后演示ShowPassingFlash在不同time_width下的效果。
# 创建一个多边形作为示例图形p = RegularPolygon(n=5, color=GRAY).scale(2)self.add(p)colors = [RED, BLUE, GREEN]time_widths = [0.5, 1, 2]# 不同time_width参数的效果for idx, tw in enumerate(time_widths):    self.play(        ShowPassingFlash(            p.copy().set_color(colors[idx]),            time_width=tw,            run_time=2,        )    )    self.wait()
2.7. Wiggle 示例

首先创建了一个文本对象和一个矩形,然后分别演示Wiggle的默认参数,scale_value参数,rotation_angle 参数,n_wiggles参数以及scale_about_point 和 rotate_about_point参数的使用效果。
# 创建一个文本对象和一个矩形作为示例图形t = Text("Wiggle Example").shift(UP)r = Rectangle(width=2, height=1).shift(DOWN)self.add(t, r)# 默认参数下的Wiggleself.play(Wiggle(t), Wiggle(r))self.wait()# 指定scale_value参数self.play(    Wiggle(t, scale_value=1.3),    Wiggle(r, scale_value=1.5),)self.wait()# 指定rotation_angle参数self.play(    Wiggle(t, rotation_angle=np.pi / 4),    Wiggle(r, rotation_angle=np.pi / 3),)self.wait()# 指定n_wiggles参数self.play(    Wiggle(t, n_wiggles=4),    Wiggle(r, n_wiggles=8),)self.wait()# 指定scale_about_point和rotate_about_point参数self.play(    Wiggle(        r,        scale_about_point=r.get_center(),        rotate_about_point=r.get_corner(UR),    ))
3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(indication.py),
下载地址: 完整代码 (访问密码: 6872)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

354

主题

0

回帖

1072

积分

金牌会员

积分
1072

QQ|智能设备 | 粤ICP备2024353841号-1

GMT+8, 2025-3-10 15:21 , Processed in 1.071901 second(s), 30 queries .

Powered by 智能设备

©2025

|网站地图