首页 > 其他分享 >manim边做边学--动画轨迹

manim边做边学--动画轨迹

时间:2025-01-02 15:45:13浏览次数:1  
标签:动画 轨迹 边界 -- AnimatedBoundary TracedPath 边学 函数 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,突出展示多边形边界的绘制动画。

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)

标签:动画,轨迹,边界,--,AnimatedBoundary,TracedPath,边学,函数,manim
From: https://www.cnblogs.com/wang_yb/p/18647897

相关文章

  • 10.20
    实验总结 在深入学习深度学习领域的过程中,TensorFlow和PyTorch这两大主流框架成为了我探索的重点,这段学习经历可谓收获满满。 初次接触TensorFlow,其高度模块化和高效的计算图机制令人惊叹。构建神经网络时,从定义输入占位符、构建隐藏层到设置损失函数与优化器,每一步都严......
  • 10.19
    实验八:随机森林算法实现与测试一、实验目的 深入理解随机森林的算法原理,进而理解集成学习的意义,能够使用Python语言实现随机森林算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。二、实验内容(1)从scikit-learn库中加载iris数据集,使用留出法留出1/3的......
  • 10.18
    实验七:K均值聚类算法实现与测试一、实验目的 深入理解K均值聚类算法的算法原理,进而理解无监督学习的意义,能够使用Python语言实现K均值聚类算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。二、实验内容(1)从scikit-learn库中加载iris数据集,使用留出......
  • 新春狂欢,超市管理新升级:看板软件引领高效运营!
    零售超市门店在新春期间面临着各种运营挑战,包括库存管理、销售促进、员工调度和顾客服务等方面的需求。为了高效应对这些挑战,采用看板软件可以显著提升门店的管理效率和顾客满意度。以下是对零售超市门店新春管理中看板软件的详细分析:一、看板软件概述看板软件是一种可视化管理......
  • 10.23
    实验3熟悉常用的HBase操作  1.实验目的      (1)理解HBase在Hadoop体系结构中的角色;      (2)熟练使用HBase操作常用的Shell命令;      (3)熟悉HBase操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3;(3)HBase......
  • 10.22
    实验2熟悉常用的HDFS操作  1.实验目的(1)理解HDFS在Hadoop体系结构中的角色;(2)熟练使用HDFS操作常用的Shell命令;(3)熟悉HDFS操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3;(3)JDK版本:1.8;(4)JavaIDE:Eclipse。3.实验步骤(一)编......
  • WPF通过外部资源文件为主页面控件编写样式
    1.增加外部样式文件,添加资源词典(WPF)文件创建公共样式文件GlobalStyles.xaml 编写样式文件,以<style>标记开头,TargetType属性为控件类型,如按钮“Button”,单选按钮“RadioButton”等,x:Key属性自定义命名,控件在引用属性的时候需将Style属性设置为{StaticResourcekey属性}......
  • 10.21
    实验1熟悉常用的Linux操作和Hadoop操作1.实验目的Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3。3.......
  • 10.27
    实验7Spark初级编程实践 1.实验目的(1)掌握使用Spark访问本地文件和HDFS文件的方法(2)掌握Spark应用程序的编写、编译和运行方法2.实验平台(1)操作系统:Ubuntu18.04(或Ubuntu16.04);(2)Spark版本:2.4.0;(3)Hadoop版本:3.1.3。3.实验步骤(1)Spark读取文件系统的数据(1)在spark-shell中读取L......
  • 10.26
    实验6熟悉Hive的基本操作 1.实验目的(1)理解Hive作为数据仓库在Hadoop体系结构中的角色。(2)熟练使用常用的HiveQL。2.实验平台操作系统:Ubuntu18.04(或Ubuntu16.04)。Hadoop版本:3.1.3。Hive版本:3.1.2。JDK版本:1.8。3.数据集由《Hive编程指南》(O'Reilly系列,人民邮电出版社)......