1、概述

在第二篇文章中已经对动画系统做了简要的说明,本文将用更多示例详细说明manim中的各种动画。需要说明的是,以前三篇文章使用的是manimCE0.50的版本。而本文升级到了0.60所以很多示例可能在0.50的版本中无法正常运行。

2、 淡入淡出

%%manim   -ql -v WARNING -i FadeScene
class FadeScene(Scene):def construct(self):text = Text('First Order Model').scale(2)self.add(text)# 淡入效果#self.play(FadeIn(text,lag_ratio=.2))#self.play(FadeInFrom(text,direction=UP))#self.play(FadeInFromLarge(text,scale_factor=2))#self.play(FadeInFromPoint(text,ORIGIN))# 淡出效果# self.play(FadeOut(text))# self.play(FadeOutAndShift(text,direction=RIGHT))self.play(FadeOutToPoint(text,ORIGIN))self.wait()

3、 生长动画

  • 该动画一定应用在有方向的物体上
%%manim  -ql -v WARNING -i  GrowScene
class GrowScene(Scene):def construct(self):arrow = Arrow(start=LEFT, end=RIGHT)self.add(arrow)circle=Circle()self.play(GrowArrow(arrow))self.play(Uncreate(arrow))self.add(circle)self.play(GrowFromCenter(circle,point_color=RED))#self.play(GrowFromEdge(arrow,edge=LEFT))#self.play(GrowFromPoint(circle,point=[-0.5,0,0],point_color=RED))#self.play(SpinInFromNothing(circle,path_arc=0))self.wait()

4 强调动画

%%manim   -ql -v WARNING -i Indications
from manim import *class Indications(Scene):def construct(self):indications = [ApplyWave,Circumscribe,Flash,FocusOn,Indicate,ShowPassingFlash,Wiggle]names = [Tex(i.__name__).scale(3) for i in indications]self.add(names[0])for i in range(len(names)):if indications[i] is Flash:self.play(Flash(UP))elif indications[i] is ShowPassingFlash:self.play(ShowPassingFlash(Underline(names[i])))else:self.play(indications[i](names[i]))self.play(AnimationGroup(FadeOutAndShift(names[i], UP*1.5),FadeInFrom(names[(i+1)%len(names)], DOWN*1.5),))

4.1 Flash

%%manim   -ql -v WARNING -i FlashOnCircle
from manim import *class FlashOnCircle(Scene):def construct(self):radius = 2circle = Circle(radius)self.add(circle)self.play(Flash(circle, line_length=1,num_lines=30, color=RED,flash_radius=radius+SMALL_BUFF,time_width=0.3, run_time=2,rate_func = rush_from))

4.2 路径强调 ShowPassingFlash

%%manim   -ql -v WARNING -i TimeWidthValues
class TimeWidthValues(Scene):def construct(self):p = RegularPolygon(5, color=DARK_GRAY, stroke_width=6).scale(3)lbl = VMobject()self.add(p, lbl)# 设定不同的动画持续时间for time_width in [0.2, 0.5, 1, 2]:lbl.become(Tex(r"\texttt{time\_width={{%.1f}}}"%time_width))self.play(ShowPassingFlash(p.copy().set_color(BLUE),run_time=2,time_width=time_width))self.wait()

5 位移动画

%%manim   -ql -v WARNING -i MoveAlongPathExample
class MoveAlongPathExample(Scene):def construct(self):d1 = Dot().set_color(ORANGE)l1 = Line(LEFT, RIGHT)l2 = VMobject()self.add(d1, l1, l2)l2.add_updater(lambda x: x.become(Line(LEFT, d1.get_center()).set_color(ORANGE)))self.play(MoveAlongPath(d1, l1), rate_func=linear)

6 数字动画

%%manim   -ql -v WARNING -i  NumberSceneclass NumberScene(Scene):def construct(self):number=DecimalNumber(9)self.add(number)self.play(ChangeDecimalToValue(number,1))  self.wait()

7 滚动动画

%%manim   -ql -v WARNING -i  RotateSceneclass RotateScene(Scene):def construct(self):number=DecimalNumber(9).scale(3)self.add(number)self.play(Rotate(number))  self.wait()

8 变形动画

8.1 普通变形动画

%%manim   -ql -v WARNING -i  ApplyFunctionAnimationEffect
from numpy import *
class ApplyFunctionAnimationEffect(Scene):def construct(self):square=Square()self.play(Write(square),run_time=2)self.wait()def function(mobject):mobject.scale(2)return mobjectself.play(ApplyFunction(function,mobject=square), run_time=2)self.wait()

8.2 矩阵变形动画

%%manim   -ql -v WARNING -i  ApplyMatrixEffect
from numpy import *
class ApplyMatrixEffect(Scene):def construct(self):square=Square()self.play(Write(square),run_time=2)self.wait()matrix=np.array([[2,0,0],[0,2,0],[0,0,0]])self.play(ApplyMatrix(matrix,mobject=square), run_time=2)self.wait()

效果同上

8.3 变化到指定颜色

%%manim   -ql -v WARNING -i FadeToColorEffect
from numpy import *
class FadeToColorEffect(Scene):def construct(self):square=Square()square.set_color(RED).set_fill(WHITE,opacity=1)self.play(Write(square),run_time=2)self.wait(3)self.play(FadeToColor(square,PINK),run_time=2)self.wait()

8.4 颜色与形状组合变换

%%manim   -ql -v WARNING -i DifferentFadeTransforms
class DifferentFadeTransforms(Scene):def construct(self):starts = [Rectangle(width=4, height=1) for _ in range(3)]VGroup(*starts).arrange(DOWN, buff=1).shift(3*LEFT)targets = [Circle(fill_opacity=1).scale(0.25) for _ in range(3)]VGroup(*targets).arrange(DOWN, buff=1).shift(3*RIGHT)self.play(*[FadeIn(s) for s in starts])self.play(FadeTransform(starts[0], targets[0], stretch=True),FadeTransform(starts[1], targets[1], stretch=True),FadeTransform(starts[2], targets[2], stretch=True))self.play(*[FadeOut(mobj) for mobj in self.mobjects])

8.5 变形子对象

%%manim   -ql -v WARNING -i FadeTransformSubmobjectsfrom manim import *class FadeTransformSubmobjects(Scene):def construct(self):src = VGroup(Square(), Circle().shift(LEFT + UP))src.shift(3*LEFT + 2*UP)src_copy = src.copy().shift(4*DOWN)target = VGroup(Circle(), Triangle().shift(RIGHT + DOWN))target.shift(3*RIGHT + 2*UP)target_copy = target.copy().shift(4*DOWN)self.play(FadeIn(src), FadeIn(src_copy))self.play(FadeTransform(src, target),FadeTransformPieces(src_copy, target_copy))self.play(*[FadeOut(mobj) for mobj in self.mobjects])

8.6 变形并替换


%%manim   -ql -v WARNING -i ReplacementTransformScenefrom manim import *class ReplacementTransformScene(Scene):def construct(self):src = Square().shift(3*LEFT)target = Circle().shift(3*RIGHT)self.add(src,target)self.play(ReplacementTransform(src,target) )self.wait()

8.7 就地缩放

%%manim   -ql -v WARNING -i ScaleInPlaceScenefrom manim import *class ScaleInPlaceScene(Scene):def construct(self):src = Square().set_fill(WHITE,opacity=1)self.add(src)self.play(ScaleInPlace(src,scale_factor=0.3) )self.wait()

8.8 缩放消失¶

%%manim   -ql -v WARNING -i ShrinkToCenterScenefrom manim import *class ShrinkToCenterScene(Scene):def construct(self):src = Square().set_fill(WHITE,opacity=1)self.add(src)self.play(ShrinkToCenter(src) )self.wait()

8.9 拷贝动画

%%manim   -ql -v WARNING -i TransformFromCopyScenefrom manim import *class TransformFromCopyScene(Scene):def construct(self):src = Square().shift(3*LEFT)target = Circle().shift(3*RIGHT)self.add(src,target)self.play(TransformFromCopy(src,target) )self.wait()

8.10 文字匹配动画

%%manim   -ql -v WARNING -i Anagramclass Anagram(Scene):def construct(self):src = Text("the morse code")tar = Text("here come dots")self.play(Write(src))self.wait(0.5)self.play(TransformMatchingShapes(src, tar, path_arc=PI/2))self.wait(0.5)

8.11 公式匹配动画

%%manim   -ql -v WARNING -i MatchingEquationPartsclass MatchingEquationParts(Scene):def construct(self):eq1 = MathTex("{{a^2}} + {{b^2}} = {{c^2}}")eq2 = MathTex("{{a^2}} = {{c^2}} - {{b^2}}")self.add(eq1)self.wait(0.5)self.play(TransformMatchingTex(eq1, eq2))self.wait(0.5)

让数学变得更生动manim库的使用(4)-动画系统详解相关推荐

  1. 对python3中pathlib库的Path类的使用详解

    原文连接   https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 ...

  2. python3库_对python3中pathlib库的Path类的使用详解

    用了很久的os.path,今天发现竟然还有这么好用的库,记录下来以便使用. 1.调用库 from pathlib import 2.创建Path对象 p = Path('D:/python/1.py' ...

  3. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  4. highlight.js css,JS库之Highlight.js的用法详解

    下载到本地后,新建个页面测试 1.在head中加入css和js的引用 highlight hljs.initHighlightingOnLoad(); 2.添加对应要显示的内容 # 读取文件内容 de ...

  5. python pptx库中文文档_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

  6. 机器视觉库之detectron2安装及使用详解

    机器视觉库之detectron2安装及使用详解 本文转自:https://blog.csdn.net/qq_18560985/article/details/124539628 文章目录 前言 一.D ...

  7. python pptx教学_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

  8. 考研数学一真题1987年-2022年所有历年真题及详解(高清无水印)

    下载链接 考研数学一真题1987年-2022年历年真题及详解(高清无水印)-其它文档类资源-CSDN下载考研数学一真题1987年-2022年所有历年真题及详解(高清无水印)1987-2022数学一历年 ...

  9. 在C语言中实现协程库(一)----------协程切换原理详解

    从这篇文章开始,我将一点一点详细介绍如何在c语言中实现协程库.并对其中涉及到的技术进行详细的解释. 感兴趣的小伙伴欢迎一起参与 代码地址 协程切换原理 使用glibc中<ucontext.h&g ...

最新文章

  1. [New Portal]Windows Azure Virtual Machine (8) Virtual Machine高可用(上)
  2. JAVA语言中的反射机制
  3. 【HANA系列】SAP HANA XS创建XSJOB后台执行
  4. AutoLISP绘制圆DCL对话框
  5. TRUNCATE TABLE恢复-脚本
  6. linux申请cache和释放cache,Linux--- 手工释放系统cache
  7. PHP字符串中的变量解析(+教你如何在PHP字符串中加入变量)
  8. meteor是什么东西?
  9. silverlight中datagrid数据到处excel
  10. java重命名文件(附道客巴巴文档下载方法)
  11. KDE环境中文语言包安装问题
  12. Ignite 安装启动(本地单机)
  13. 最新 Transformer 预训练模型综述!
  14. java 假币问题_假币问题-题解(Java代码)
  15. 极狐阿尔法S 全新HI版在上海率先推送城区NCA
  16. html天气js,H5 实现天气效果(心知天气插件)
  17. SparkSQL专题1 ~ 造数
  18. Nexus3 Recommended file descriptor limit is 65536 but count is 4096
  19. 第二十三章 类关键字 - Language
  20. 【flutter】使用permission_handler配置android和 iOS的权限

热门文章

  1. java——集合——List集合——List集合
  2. Python三方库:RabbitMQ基本使用
  3. iOS—APP打包上线流程
  4. 【机器学习】RBF神经网络原理与Python实现
  5. 转 Fedora各个历史版本官方下载地址
  6. Linux系统调用之lseek函数
  7. 网络安全传输系统(3)-加密传输
  8. MarkDown首行缩进和换行
  9. 书生云签10亿元、EB级订单,中国超融合迎来春天
  10. 小甜甜布兰妮的饮食瘦身套餐