manim边做边学–动画轨迹

本篇介绍Manim中两个和动画轨迹相关的类,AnimatedBoundaryTracedPath

AnimatedBoundary聚焦于图形边界的动态呈现,能精准控制边界绘制的每一帧,助力我们清晰展示几何图形的搭建流程。

TracedPath则擅长实时追踪物体或点的运动轨迹,以直观且动态的方式呈现各类运动路径,为我们分析和展示复杂运动提供了强大支持 。

1. 动画概述

1.1. AnimatedBoundary

在讲解几何图形(如多边形、圆形等)的构造过程时,AnimatedBoundary可以逐帧展示图形边界的绘制,帮助我们理解图形是如何一步步形成的。

此外,当图形的边界随着某个参数或条件动态变化时,使用 AnimatedBoundary 也可以生动地呈现这种变化。

AnimatedBoundary动画的主要特点在于图形边界的绘制,它能够精确控制边界的出现顺序和方式。

这使得在展示几何图形的构建过程时,能够突出边界这一关键元素,更清楚地展示图形的轮廓是如何形成的。

它的参数主要有:

参数名称 类型 说明
vmobject VMobject 要应用动画边界的 VMobject
colors [Color] 颜色列表,用于指定边界颜色变化的序列
max_stroke_width int 最大描边宽度
cycle_rate float 颜色循环速率
back_and_forth bool 是否来回循环颜色变化
draw_rate_func func 用于控制绘制速率的函数
fade_rate_func func 用于控制淡出速率的函数

1.2. TracedPath

在物理学或数学中,当需要展示物体的运动轨迹时,TracedPath 是一个非常合适的工具。

例如,展示抛体运动、圆周运动等物体的运动路径时,能让我们直观地看到物体在空间中的运动轨迹。

此外,对于函数图像的绘制,也可使用 TracedPath 来模拟绘图过程,展示函数曲线是如何随着自变量的变化而逐步生成的。

这在演示函数的性质和图像绘制方法时非常有用,能够帮助学生更好地理解函数的变化规律。

TracedPath动画的主要特点是能够实时跟踪物体或点的运动轨迹,并将其以动画的形式呈现出来。

这种实时跟踪的特性使得动画更加真实、生动,能够准确地反映物体的运动状态。

它的参数主要有:

参数名称 类型 说明
traced_point_func func 要跟踪的函数,该函数应返回一个点的坐标
stroke_width float 轨迹的线条宽度
stroke_color Color 轨迹的颜色
dissipating_time float 路径消散所需的时间

dissipating_time参数为None时,表示路径轨迹不消散。

TracedPath还有一个方法:

名称 说明
update_path 用于更新轨迹路径的方法,通常在动画过程中被调用,以实时跟踪点的移动并更新轨迹

2. 使用示例

下面通过几个根据实际应用场景简化而来的示例来演示两个动画类的使用。

2.1. 多边形绘制

这个示例中,首先创建了一个矩形多边形,然后使用 AnimatedBoundary 为其添加边界动画,

颜色在蓝色绿色黄色 之间循环变化,循环速率为 3,突出展示多边形边界的绘制动画。

```python
polygon = Polygon(
    [-2, -1, 0],
    [2, -1, 0],
    [2, 1, 0],
    [-2, 1, 0],
)
boundary = AnimatedBoundary(
    polygon,
    colors=[BLUE, GREEN, YELLOW],
    cycle_rate=3,
)
self.add(polygon, boundary)
```

manim边做边学--动画轨迹

2.2. 动态更新圆形边界

先创建了一个圆形,其边界的颜色在红色黄色绿色 之间循环,循环速率为 2。

然后通过动画将圆形的半径放大 2 倍,展示了圆形边界在动态变化过程中的动画效果。

```python
circle = Circle(radius=1)
boundary = AnimatedBoundary(
    circle,
    colors=[RED, YELLOW, GREEN],
    cycle_rate=2,
)
self.add(circle, boundary)
self.play(circle.animate.scale(2), run_time=3)
```

manim边做边学--动画轨迹

2.3. 跟踪抛体运动轨迹

首先定义一个抛体运动的函数 move_path,再创建了一个点 Dot 和一个 TracedPath 对象来跟踪点的运动轨迹。

轨迹颜色为绿色 ,宽度为 3,展示了抛体运动的轨迹跟踪效果。

```python
d = Dot().shift(LEFT * 2)
trace = TracedPath(
    d.get_center,
    stroke_color=GREEN,
    stroke_width=3,
)
self.add(d, trace)

def move_path(t):
    x = t
    y = 2 - 0.5 * t**2
    return np.array([x, y, 0])

f = ParametricFunction(
    move_path,
    t_range=(-3, 3),
)
self.play(MoveAlongPath(d, f), run_time=3)
```

manim边做边学--动画轨迹

2.4. 函数图像绘制过程

这个示例中,定义了一个正弦函数 move_path,再创建一个点沿着这个正弦函数图像运动,同时创建了一个 TracedPath 对象来跟踪函数图像的绘制过程。

轨迹颜色为紫色 ,宽度为 2,且设置轨迹在1秒后消失。

```python
d = Dot(color=BLUE).shift([-PI, 0, 0])
trace = TracedPath(
    d.get_center,
    stroke_color=PURPLE,
    stroke_width=2,
    dissipating_time=1,
)
self.add(d, trace)

def move_path(x):
    return np.array([x, np.sin(x), 0])

f = ParametricFunction(move_path, t_range=(-PI, PI))
self.play(MoveAlongPath(d, f), run_time=3)
```

manim边做边学--动画轨迹

3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(trace.py),

下载地址: 完整代码 (访问密码: 6872)

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/5434.html

(0)
LomuLomu
上一篇 2025 年 1 月 6 日 下午7:17
下一篇 2025 年 1 月 6 日 下午8:19

相关推荐

  • 表的创建与删除:从理论到实践的全面指南

    title: 表的创建与删除:从理论到实践的全面指南date: 2025/1/1updated: 2025/1/1author: cmdragon excerpt:表是关系数据库的基本存储结构,承载着核心数据及其关联关系。在数据库设计与管理中,表的创建与删除是至关重要的操作,它直接影响数据库的结构、数据的完整性以及查询的性能。 categories: 前端开…

    2025 年 1 月 6 日
    42400
  • 『玩转Streamlit』–上传下载文件

    在Web应用中,文件的上传下载 是交互中不可缺少的功能。 因为在业务功能中,一般不会只有文字的交互,资料或图片的获取和分发是很常见的需求。 比如,文件上传 可让用户向服务器提交数据,如上传图片分享生活、提交文档用于工作协作等,丰富应用功能。 而文件下载 则使用户能获取服务器端的资源,像下载软件、报告等,提升用户对应用内容的获取能力,增强用户体验和应用实用性。…

    2024 年 12 月 30 日
    38000
  • Java难绷知识02——抽象类中只能有或者必须有抽象方法吗以及有关抽象类的细节探讨

    Java难绷知识02——抽象类中只能有或者必须有抽象方法吗以及有关抽象类的细节探讨 标题长的像轻小说 首先回答标题抛出的问题——False 显然,有抽象方法的类是抽象类,但是,抽象类中只能有或者必须有抽象方法吗? 抽象类可以包含抽象方法,也可以包含具体方法 如果一个类包含至少一个抽象方法,用abstract关键字修饰,那么这个类必须被声明为抽象类。 抽象类除…

    未分类 2024 年 12 月 30 日
    38500
  • 【Java多线程】如何使用Java多线程下载网络文件 断点续传

    如何使用Java多线程下载网络文件,并实现断点续传 在现代网络应用中,多线程下载是一种常见的技术,它可以显著提高下载速度并提供更好的用户体验。本篇文章将介绍如何使用Java实现多线程下载,并结合项目中的代码作为示例进行讲解。 1. 多线程下载的基本原理 多线程下载的基本思想是将一个文件分成多个部分,每个部分由一个线程独立下载,最后将这些部分合并成完整的文件。…

    未分类 2025 年 1 月 11 日
    40500
  • Java Spring与Struts2框架安全漏洞深度解析

    三、Java Spring框架安全风险剖析 3.1 Spring核心组件与SpEL机制 ①框架概述作为企业级应用开发的基石,Spring Framework通过模块化设计显著提升了软件开发效率。其核心功能涵盖依赖注入(IoC)、面向切面编程(AOP)和模型-视图-控制器(MVC)架构,同时整合了数据访问、Web服务等关键模块。自3.0版本起,SpEL表达式引…

    2025 年 5 月 18 日
    22500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信