manim边做边学--动画轨迹

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499

本篇介绍Manim中两个和动画轨迹相干的类,AnimatedBoundary和TracedPath。
AnimatedBoundary聚焦于图形边界的动态出现,能精准控制边界绘制的每一帧,助力我们清晰展示几何图形的搭建流程。
TracedPath则善于实时追踪物体或点的运动轨迹,以直观且动态的方式出现各类运动路径,为我们分析和展示复杂运动提供了强盛支持 。
1. 动画概述

1.1. AnimatedBoundary

在讲解几何图形(如多边形、圆形等)的构造过程时,AnimatedBoundary可以逐帧展示图形边界的绘制,帮助我们明白图形是如何一步步形成的。
此外,当图形的边界随着某个参数或条件动态变化时,使用 AnimatedBoundary 也可以生动地出现这种变化。
AnimatedBoundary动画的主要特点在于图形边界的绘制,它能够精确控制边界的出现顺序和方式。
这使得在展示几何图形的构建过程时,能够突出边界这一关键元素,更清楚地展示图形的表面是如何形成的。
它的参数主要有:
参数名称类型说明vmobjectVMobject要应用动画边界的 VMobjectcolors[Color]颜色列表,用于指定边界颜色变化的序列max_stroke_widthint最大描边宽度cycle_ratefloat颜色循环速率back_and_forthbool是否来回循环颜色变化draw_rate_funcfunc用于控制绘制速率的函数fade_rate_funcfunc用于控制淡出速率的函数1.2. TracedPath

在物理学或数学中,当必要展示物体的运动轨迹时,TracedPath 是一个非常合适的工具。
例如,展示抛体运动、圆周运动等物体的运动路径时,能让我们直观地看到物体在空间中的运动轨迹。
此外,对于函数图像的绘制,也可使用 TracedPath 来模仿绘图过程,展示函数曲线是如何随着自变量的变化而逐步生成的。
这在演示函数的性质和图像绘制方法时非常有用,能够帮助学生更好地明白函数的变化规律。
TracedPath动画的主要特点是能够实时跟踪物体或点的运动轨迹,并将其以动画的形式出现出来。
这种实时跟踪的特性使得动画更加真实、生动,能够准确地反映物体的运动状态。
它的参数主要有:
参数名称类型说明traced_point_funcfunc要跟踪的函数,该函数应返回一个点的坐标stroke_widthfloat轨迹的线条宽度stroke_colorColor轨迹的颜色dissipating_timefloat路径消散所需的时间当dissipating_time参数为None时,表示路径轨迹不消散。
TracedPath还有一个方法:
名称说明update_path用于更新轨迹路径的方法,通常在动画过程中被调用,以实时跟踪点的移动并更新轨迹2. 使用示例

下面通过几个根据现实应用场景简化而来的示例来演示两个动画类的使用。
2.1. 多边形绘制

这个示例中,起首创建了一个矩形多边形,然后使用 AnimatedBoundary 为其添加边界动画,
颜色在蓝色绿色黄色之间循环变化,循环速率为 3,突出展示多边形边界的绘制动画。
  1. polygon = Polygon(
  2.     [-2, -1, 0],
  3.     [2, -1, 0],
  4.     [2, 1, 0],
  5.     [-2, 1, 0],
  6. )
  7. boundary = AnimatedBoundary(
  8.     polygon,
  9.     colors=[BLUE, GREEN, YELLOW],
  10.     cycle_rate=3,
  11. )
  12. self.add(polygon, boundary)
复制代码

2.2. 动态更新圆形边界

先创建了一个圆形,其边界的颜色在赤色黄色绿色之间循环,循环速率为 2。
然后通过动画将圆形的半径放大 2 倍,展示了圆形边界在动态变化过程中的动画效果。
  1. circle = Circle(radius=1)
  2. boundary = AnimatedBoundary(
  3.     circle,
  4.     colors=[RED, YELLOW, GREEN],
  5.     cycle_rate=2,
  6. )
  7. self.add(circle, boundary)
  8. self.play(circle.animate.scale(2), run_time=3)
复制代码

2.3. 跟踪抛体运动轨迹

起首界说一个抛体运动的函数 move_path,再创建了一个点 Dot 和一个 TracedPath 对象来跟踪点的运动轨迹。
轨迹颜色为绿色,宽度为 3,展示了抛体运动的轨迹跟踪效果。
  1. d = Dot().shift(LEFT * 2)
  2. trace = TracedPath(
  3.     d.get_center,
  4.     stroke_color=GREEN,
  5.     stroke_width=3,
  6. )
  7. self.add(d, trace)
  8. def move_path(t):
  9.     x = t
  10.     y = 2 - 0.5 * t**2
  11.     return np.array([x, y, 0])
  12. f = ParametricFunction(
  13.     move_path,
  14.     t_range=(-3, 3),
  15. )
  16. self.play(MoveAlongPath(d, f), run_time=3)
复制代码

2.4. 函数图像绘制过程

这个示例中,界说了一个正弦函数 move_path,再创建一个点沿着这个正弦函数图像运动,同时创建了一个 TracedPath 对象来跟踪函数图像的绘制过程。
轨迹颜色为紫色,宽度为 2,且设置轨迹在1秒后消散。
  1. d = Dot(color=BLUE).shift([-PI, 0, 0])
  2. trace = TracedPath(
  3.     d.get_center,
  4.     stroke_color=PURPLE,
  5.     stroke_width=2,
  6.     dissipating_time=1,
  7. )
  8. self.add(d, trace)
  9. def move_path(x):
  10.     return np.array([x, np.sin(x), 0])
  11. f = ParametricFunction(move_path, t_range=(-PI, PI))
  12. self.play(MoveAlongPath(d, f), run_time=3)
复制代码

3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(trace.py),
下载地址: 完整代码 (访问密码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表