【manim动画教程】--高级动画效果

这篇具有很好参考价值的文章主要介绍了【manim动画教程】--高级动画效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在常用的动画效果中,介绍了一些元素的创建,销毁,移动和变换的方法,这些方法都是针对单个动画的。
如果需要多个动画互相关联,或者元素需要有更复杂的运动方式,那么,仅仅依靠常用的动画效果可能就无法满足要求了。

本篇的高级动画效果主要介绍一些更加灵活的元素运动方式,如何组合多个动画,以及如何联动多个动画的方式。
掌握了这些方法,就能够表达出更加复杂的数学几何动画。

1. 沿着路径运动

常用的动画一般都是直线运动或者圆弧运动,而 MoveAlongPath 可以让元素沿着任意的函数轨迹来运动。
下面的示例是一个点沿着一个较为复杂的三角函数形成的路径运动。

cos_func = FunctionGraph(
    lambda t: np.cos(t) + 0.5 * np.cos(7 * t) + (1 / 7) * np.cos(14 * t),
    color=RED,
)
sc.add(cos_func)
d1 = dot(cos_func.get_start())
sc.play(MoveAlongPath(d1, cos_func), rate_func=linear, run_time=3)

运行效果:
沿着路径运动.gif

2. 保留运动路径

保留动画的轨迹,可以更好的追踪元素的变化规律。
通过 TracedPath可以设置保留运动轨迹的效果。
下面的示例是一个点以一定的弧度运行,并将其运行的轨迹绘制出来。

d = dot(RIGHT * 2)
b = TracedPath(d.get_center)
sc.add(d, b)

sc.play(d.animate(path_arc=PI / 4).shift(LEFT * 2))
sc.play(d.animate(path_arc=-PI / 4).shift(LEFT * 2))

运行效果:
保留运动路径.gif

3. 动画组合

在常用的动画效果中,一般都是逐个显示各个动画效果,manim中提供了几个控制动画组合的方式。
用的较多的两个分别是:

  1. 多个动画组合时,设置每个动画的延迟启动时间
  2. 多个动画组合时,前一个动画成功执行后再执行下一个动画

3.1 延迟启动

通过 LaggedStart控制组合的多个动画之间的启动时间间隔。
下面的示例是一个点先启动,但是要运行1秒才到达终点,
另一个点延迟0.5秒启动,但是运行0.5秒就到达终点,所以两个点最终应该同时到达

d1 = dot(LEFT * 2 + UP, color=RED)
d2 = dot(LEFT * 2 + DOWN)
dl = DashedLine(
    RIGHT * 2 + UP * 3,
    RIGHT * 2 + DOWN * 3,
    dash_length=0.1,
    dashed_ratio=0.8,
    stroke_width=2,
    color=GREEN,
)
sc.add(d1, d2, dl)
sc.wait(0.5)

ani1 = d1.animate(run_time=1).shift(RIGHT * 4)
ani2 = d2.animate(run_time=0.5).shift(RIGHT * 4)

sc.play(LaggedStart(ani1, ani2, lag_ratio=0.5))

运行效果:
动画组合-延迟启动.gif

3.2 顺序启动

通过 Succession控制多个动画顺序执行,它能够保证上一个执行成功后才执行下一个。
下面的示例是4个不同颜色的点,每个点移动成功之后,移动下一个点。

dot1 = Dot(point=LEFT * 2 + UP * 2, radius=0.16, color=BLUE)
dot2 = Dot(point=LEFT * 2 + DOWN * 2, radius=0.16, color=MAROON)
dot3 = Dot(point=RIGHT * 2 + DOWN * 2, radius=0.16, color=GREEN)
dot4 = Dot(point=RIGHT * 2 + UP * 2, radius=0.16, color=YELLOW)
sc.add(dot1, dot2, dot3, dot4)

sc.play(
    Succession(
        dot1.animate.move_to(dot2),
        dot2.animate.move_to(dot3),
        dot3.animate.move_to(dot4),
        dot4.animate.move_to(dot1),
    )
)

运行效果:
动画组合-顺序启动.gif

4. 动画联动

动画联动是比动画组合更复杂的一种模式,动画组合时,每个动画其实是固定的,只是启动的时机不一样。
而在动画联动中,一个动画如何运行是完全基于另一个动画的,而不是实现预设的。

下面的示例是一个角度的联动效果,
初始元素有:

  1. 两条线line1line_moving组成的角度
  2. 标识角度的一段弧线a
  3. 标识角度的字母 tex
  4. 显示角度数值的文字 theta_tex

初始角度 110°,然后可以看到随着 line_moving的移动(先变成 90°,再增加 140°),
atextheta_tex的联动效果。

rotation_center = LEFT

theta_tracker = ValueTracker(110)
line1 = Line(LEFT, RIGHT)
line_moving = Line(LEFT, RIGHT)
line_ref = line_moving.copy()
line_moving.rotate(theta_tracker.get_value() * DEGREES, about_point=rotation_center)
a = Angle(line1, line_moving, radius=0.5, other_angle=False)
tex = MathTex(r"\theta").move_to(
    Angle(
        line1, line_moving, radius=0.5 + 3 * SMALL_BUFF, other_angle=False
    ).point_from_proportion(0.5)
)

theta_tex = Tex(
    r"$\theta = $",
    str(int(theta_tracker.get_value())),
    r"$^\circ$",
    font_size=50,
    color=RED,
).shift(UP * 2)

sc.add(line1, line_moving, a, tex, theta_tex)
sc.wait()

line_moving.add_updater(
    lambda x: x.become(line_ref.copy()).rotate(
        theta_tracker.get_value() * DEGREES, about_point=rotation_center
    )
)
a.add_updater(
    lambda x: x.become(Angle(line1, line_moving, radius=0.5, other_angle=False))
)
tex.add_updater(
    lambda x: x.move_to(
        Angle(
            line1, line_moving, radius=0.5 + 3 * SMALL_BUFF, other_angle=False
        ).point_from_proportion(0.5)
    )
)
theta_tex.add_updater(
    lambda x: x.become(
        Tex(
            r"$\theta = $",
            str(int(theta_tracker.get_value())),
            r"$^\circ$",
            font_size=50,
            color=RED,
        ).shift(UP * 2)
    )
)

sc.play(theta_tracker.animate.set_value(90))
sc.play(theta_tracker.animate.increment_value(140), run_time=3)

运行效果:
动画联动.gif

5. 总结回顾

本篇介绍的高级动画效果,其实是一些更加灵活的制作动画的方法。
利用这些方法,可以更加方便的定制自己的动画效果。

本篇介绍的高级动画效果和上一篇的常用动画效果可以理解成软件的VIP功能和免费功能,
如果免费功能够用,尽量使用免费功能,免费功能满足不了要求的时候,再考虑VIP功能。

本文关联的微信视频号短视频:
manim-高级动画效果-视频号.png文章来源地址https://www.toymoban.com/news/detail-412989.html

到了这里,关于【manim动画教程】--高级动画效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 - 实现容器卡片翻转动画效果,类似考勤打卡签到时翻转效果(像翻牌抽奖类似的效果动画)详细示例源码教程,一键复制开箱即用!

    微信小程序项目中,实现了任意容器像卡片一样的翻转效果动画,类似钉钉打卡签到点击时的翻转动画! 示例源码的注释非常详细,保证一键复制后改改样式就能应用到你的项目中去了。

    2024年02月10日
    浏览(87)
  • 微信小程序 - 签到打卡旋转 3D 动画功能,仿钉钉打卡签到时 “容器“ 动画翻转效果(超详细完整示例源码教程,代码简洁、丝滑流畅、示例复制即用)

    由于微信小程序的动画与普通 CSS 动画稍有不同,所以网上基本没有这方面的功能源码。 本文 实现了微信小程序开发中,类似钉钉签到打卡时的动画效果,圆形硬币形状的翻转功能, 您可以直接复制示例源码,功能都做好了只需要把你的内容放进入即可。 如下图所示,当点

    2024年02月11日
    浏览(87)
  • CSS教程--动画

    目录 一.2D转换 1.translate()平移操作 2.rotate() 旋转操作 3.scale() 放大缩小操作 3.1.scaleX() 3.2.scaleY() 4.skew() 倾斜操作 二.3D变换 1.rotateX() 2.rotateY() 3.rota

    2024年02月07日
    浏览(33)
  • Blender骨骼动画简明教程

    Blender 是首选的开源3D动画软件之一。 令人惊讶的是,开始创建简单的角色动画并不需要太多时间。 一旦获得最终的 3D 角色模型,你就可以使用该软件的众多动画功能和工具将其变为现实。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 例如,Blender 的绑定工具将帮助你实现角色

    2024年02月07日
    浏览(51)
  • App复杂动画实现——Rive保姆级教程

    作者:京东物流 沈明亮 在App开发过程中,如果想实现动画效果,可以粗略分为两种方式。一种是直接用代码编写,像平移、旋转等简单的动画效果,都可以这么干,如果稍微复杂点,就会对开发工程师的数学功底、图形图像学功底有很高的要求。 另一种方式,可以让UI同学

    2023年04月23日
    浏览(35)
  • Unity教程3:使用BlendTree控制人物移动动画切换

    目录 创建动画文件 移动动画逻辑以及BlendTree的使用方法  创建移动变量 了解并使用混合树 实现保持移动方向的动画切换 手册链接在这:Unity User Manual (2019.3) - Unity 手册 实现了基本的人物移动代码后,为了使得我们的人物更加的生动有趣,我们还需要实现人物的动画效果。

    2024年02月13日
    浏览(42)
  • 3ds Max图文教程: 创建致命的冠状病毒动画

    推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 步骤 1 打开  3ds Max 。 打开 3ds Max 步骤 2 在透视视口中创建一个半径为 50, 线段 为  20  的  GeoSphere 。 创建地球 步骤 3 打开修改器列表并将 置换修改器 应用于地理 球。 置换修饰符 步骤 4 单击 地图 的 无 按钮。

    2024年02月15日
    浏览(36)
  • App复杂动画实现——Rive保姆级教程 | 京东云技术团队

    作者:京东物流 沈明亮 在App开发过程中,如果想实现动画效果,可以粗略分为两种方式。一种是直接用代码编写,像平移、旋转等简单的动画效果,都可以这么干,如果稍微复杂点,就会对开发工程师的数学功底、图形图像学功底有很高的要求。 另一种方式,可以让UI同学

    2023年04月26日
    浏览(38)
  • Unity中使用Mixamo为3D模型添加动画(保姆级教程)

    最近在做为Unity的3D人物添加动画,浅浅记录一下操作方法。 打开Unity Hub,点击New Project,然后按照下图步骤操作: 打开项目——GameObject——3D Object——Plane,这一步非必要,如果已有3D场景,可忽略这一步。 点此打开Mixamo 打开Mixamo后进入如下界面,这里有一些3D角色和动画可

    2024年02月07日
    浏览(56)
  • Pygame 基础教程12: 使用 精灵(Sprite) 实现 帧动画(Animation)

    原文链接:https://xiets.blog.csdn.net/article/details/131395288 版权声明:原创文章禁止转载 专栏目录:Pygame 专栏(总目录) 精灵(Sprite) 表示游戏画面中基本的显示元素,前面所介绍的精灵虽然位置可以动态移动,但都是一张静态图片。游戏中还有许多动态的动画精灵,如一只飞翔的

    2024年01月17日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包