本篇介绍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,突出展示多边形边界的绘制动画。

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)

2.2. 动态更新圆形边界

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

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

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)

2.3. 跟踪抛体运动轨迹

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

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

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)

2.4. 函数图像绘制过程

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

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

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)

3. 附件

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

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

manim边做边学--动画轨迹的更多相关文章

  1. window.requestAnimationFrame() ,做逐帧动画,你值得拥有

    window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画.该方法使用一个回调函数作为参数,这个回调函数会在浏览器重 ...

  2. 边做边学入门微信小程序之仿豆瓣评分

    微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...

  3. UIView封装动画--iOS利用系统提供方法来做转场动画

    UIView封装动画--iOS利用系统提供方法来做转场动画 UIViewAnimationOptions option; if (isNext) { option=UIViewAnimationOpt ...

  4. Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain

    近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...

  5. 用Direct2D和DWM来做简单的动画效果2

    原文:用Direct2D和DWM来做简单的动画效果2 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunnyloves/article/detai ...

  6. 用Direct2D和DWM来做简单的动画效果

    原文:用Direct2D和DWM来做简单的动画效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunnyloves/article/detail ...

  7. WPF 后台代码做 TranslateTransform 的动画

    本文告诉大家,在后台代码,对 TranslateTransform 做动画的方法 今天小伙伴问我一个问题,说为什么相同的代码,如果设置到按钮上,是可以让按钮的某个属性变更,但是如果设置给 Transl ...

  8. 【从无到有】教你使用animation做简单的动画效果

    今天写写怎么用animation属性做一些简单的动画效果 在CSS选择器中,使用animition动画属性,调用声明好的关键帧 首先声明一个动画(关键帧): @keyframes name{ from ...

  9. 用 CSS3 做一个流星雨动画

    昨天 UI 提交过来一个登录页的设计稿,要求背景有一个流星雨动画,做完之后觉得挺有趣,分享一下~ 一.流星动画 首先创建一个 div 作为画布 <div id="stars" ...

  10. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

随机推荐

  1. 使用MySQL Workbench进行数据库备份

    1.打开MySQL Workbench 2.进行数据库连接配置 如果之前连过,会有历史记录,直接点击需要备份的连接即可 3.进入主界面后,选择左侧的Administration选项卡,然后点击Data ...

  2. CentOS 7环境下DM8数据库的安装与配置

    一.环境准备 首先,确保你的系统已经安装了CentOS 7,并且具有足够的磁盘空间和内存来支持DM8数据库的运行.此外,你还需要具备管理员权限,以便进行后续的安装和配置操作. 二.下载DM8安装包 访 ...

  3. 海外SRC信息收集工具

    海外SRC信息收集 ​ 子域名爆破工具:bbot,subfinder ​ 相关测评:https://blog.blacklanternsecurity.com/p/subdomain-enumerat ...

  4. Chapter12 动态内存与智能指针

    目录 12.1.0 介绍 12.1.1 shared_ptr类 make_shared函数 shared_ptr的拷贝和引用 shared_ptr自动销毁所管理的对象- -shared_ptr还会自动 ...

  5. 2-4 C++ const限定词

    目录 2.4.1 const之于基本类型(base type) 含义 编译过程 2.4.2 const之于引用 含义 作用 注意点 2.4.3 const之于指针 含义[两类] 变量定义的读法:从左往 ...

  6. Air780E量产binpkg文件如何获取

    ​ 今天我们学习Air780E量产binpkg文件如何获取: 一.背景 最近luatos开发客户增多,客户在量产烧录的时候需要binpkg文件,但是有些客户不知道binpkg文件是什么,在哪里获取,是 ...

  7. 配置NVIDIA Container Runtime和容器运行GPUStack教程

    GPUStack 是一个设计用于运行大模型的开源 GPU 集群管理器,提供私有部署的大模型服务,支持大语言模型.Embedding 文本嵌入模型.Reranker 重排序模型.Vision 多模态模型 ...

  8. 鸿蒙开发Hvigor插件动态生成代码

    Hvigor允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享.Hvigor主要提供了两种方式来实现插件:基于hvigorfile脚本开发插件.基于typescript项目开发.下面 ...

  9. python SQLAlchemy 查询慢sql

    1.config文件添加如下配置 FLASKY_DB_QUERY_TIMEOUT = 0.1 # 设置sql执行超时时间 0.1s SQLALCHEMY_RECORD_QUERIES = True # ...

  10. MySQL之配置my.cnf

    1)可以实现直接使用mysql登录MySQL,需要添加配置文件, 进行客户端配置即可 ~/.my.cnf [client] port = 3306 socket = /var/lib/mysql/my ...