manim边学边做--渐变生长

打印 上一主题 下一主题

主题 1536|帖子 1536|积分 4608

本篇介绍Manim中的渐变生长类的动画。
这类动画的特点是可以清晰地展示图形的生成过程、物体的运动变革,资助我们更好地理解抽象概念和复杂结构。
渐变生长类的动画的重要有:

  • GrowArrow:让箭头从起始点按设定路径(如直线或弧线)和速度动态生长
  • GrowFromCenter:使对象以自身中心为出发点,向四周按指定比例和速度匀称扩展生长
  • GrowFromEdge:让对象从指定边缘开始,按照设定的速度和程度向内部或外部生长
  • GrowFromPoint:从一个点开始,按照自定义的生长函数和速度来使对象生长
  • SpinInFromNothing:结合旋转和渐显效果,使对象从无到有并陪同着旋转而出现
1. 动画概述

1.1. GrowArrow

GrowArrow重要用于箭头(Arrow)对象的动画效果,能够让箭头从无到有地生长出来,给人一种动态的引导视觉效果。
它的动画过程比较平滑,能够很好地控制箭头生长的速度和方向,重要用于展示矢量相干内容的动画。
它的重要参数有:
参数名称类型说明arrowArrow类型进举措画的箭头对象point_colorColor箭头在生长到完整大小之前的初始颜色重要方法有:
名称说明create_starting_mobject用于创建动画起始时的对象状态1.2. GrowFromCenter

GrowFromCenter以对象的中心为出发点,向四周扩展生长。
这种生长方式给人一种对称、匀称的视觉感受,使得对象的出现更加自然和美观。
对于具有中心对称性的对象,能够很好地突出其对称性,它恰当用于展现图形从中心构建过程的动画。
它的重要参数有:
参数名称类型说明mobjectMobject要进举措画的对象point_colorColor对象在生长到完整大小之前的初始颜色1.3. GrowFromEdge

GrowFromEdge以对象的边缘为起始点进行生长,能够很好地体现图形的边界扩展过程。
这种方式与GrowFromCenter形成对比,更侧重于展示图形是怎样从边界开始构建的。
它可以根据需要选择差别的边缘作为生长起始边,常用于突出图形边界扩展的效果。
它的重要参数有:
参数名称类型说明mobjectMobject要进举措画的对象edgenp.ndarray指定生长的起始边缘方向point_colorColor对象在生长到完整大小之前的初始颜色edge参数可以使用预定义的方向常量(如DOWN、RIGHT、UR等)来指定对象的边界框边缘方向,
从而确定从哪个边缘开始生长。
1.4. GrowFromPoint

GrowFromPoint从指定的一个点开始生长,这个点可以是对象内部或外部的恣意一点。
这种方式提供了高度的定制性,能够聚焦于对象在某个特定位置的生长过程。
它可以用于创建一些具有创意的动画效果,比如让多个对象从差别的点同时生长,形成一个复杂的场景。
它的重要参数有:
参数名称类型说明mobjectMobject要进举措画的对象pointnp.ndarray指定对象生长的起始点point_colorColor对象在生长到完整大小之前的初始颜色重要方法有:
名称说明create_starting_mobject创建动画起始时的对象状态create_target创建动画的目标对象状态1.5. SpinInFromNothing

SpinInFromNothing结合了旋转和从无到有的出现效果。
对象在旋转的同时渐渐显现,给人一种从虚无中旋转诞生的感觉
可以控制旋转的角度、方向和速度,以及对象出现的速度,从而实现各种差别的入场效果。
它的重要参数有:
参数名称类型说明mobjectMobject要进举措画的对象anglefloat指定对象在生长到完整大小之前旋转的角度point_colorColor对象在生长到完整大小之前的初始颜色angle参数设置2 * PI表示对象将完整旋转一周(360 度)后完全出现。
2. 使用示例

下面通过示例来演示各个生长类动画的使用。
2.1. GrowArrow 示例

在这个示例中,创建了三个差别方向的箭头。
对于每个箭头,使用GrowArrow动画并设置差别的初始颜色(point_color),为了能看出初始颜色,设置了箭头的最终颜色和初始颜色不一样。
  1. # 创建不同方向的箭头
  2. a1 = Arrow(LEFT * 2, RIGHT * 2, color=RED)
  3. a2 = Arrow(UP * 2, DOWN * 2, color=BLUE)
  4. a3 = Arrow(UR * 2, DL * 2, color=GREEN)
  5. # 以不同颜色和路径弧度展示GrowArrow动画
  6. self.play(
  7.     GrowArrow(a1, point_color=BLUE),
  8. )
  9. self.play(
  10.     GrowArrow(a2, point_color=GREEN),
  11. )
  12. self.play(
  13.     GrowArrow(a3, point_color=RED),
  14. )
复制代码

2.2. GrowFromCenter 示例

此示例创建了圆形、正方形和三角形。在GrowFromCenter动画中,为每个图形设置差别的初始颜色(point_color)。
  1. # 创建不同形状的对象
  2. circle = Circle()
  3. square = Square(color=BLUE)
  4. triangle = Triangle(color=YELLOW)
  5. # 以不同缩放比例和中心点展示GrowFromCenter动画
  6. self.play(
  7.     GrowFromCenter(circle, point_color=BLUE),
  8. )
  9. self.play(
  10.     GrowFromCenter(square, point_color=YELLOW),
  11. )
  12. self.play(
  13.     GrowFromCenter(triangle, point_color=RED),
  14. )
复制代码

2.3. GrowFromEdge 示例

在这个例子中,创建三个矩形。针对每个矩形的GrowFromEdge动画,指定了差别的起始边缘(edge)和差别的初始颜色(point_color)。
通过差别的边缘生长,可以看到矩形从边缘开始生长的多样化效果。
  1. # 创建多个矩形
  2. r1 = Rectangle(color=BLUE).shift(UP)
  3. r2 = Rectangle(color=RED)
  4. r3 = Rectangle(color=YELLOW).shift(DOWN)
  5. # 从不同边缘和以不同速度展示GrowFromEdge动画
  6. self.play(
  7.     GrowFromEdge(r1, DOWN, point_color=BLUE),
  8. )
  9. self.play(
  10.     GrowFromEdge(r2, RIGHT, point_color=RED),
  11. )
  12. self.play(
  13.     GrowFromEdge(r3, UP, point_color=YELLOW),
  14. )
复制代码

2.4. GrowFromPoint 示例

该示例先创建了三个点,然后在通过差别的起始点和自定义生长函数,展示了GrowFromPoint动画在机动指定生长起始点和控制生长方式方面的强大功能。
  1. # 创建一个点和多个正方形
  2. p1 = Dot(point=LEFT * 2, color=BLUE)
  3. p2 = Dot(point=UP * 2, color=RED)
  4. p3 = Dot(point=RIGHT * 2 + DOWN * 2, color=YELLOW)
  5. s1 = Square(color=BLUE).shift(LEFT * 2)
  6. s2 = Square(color=RED)
  7. s3 = Square(color=YELLOW).shift(RIGHT * 2)
  8. self.add(p1, p2, p3)
  9. self.play(
  10.     GrowFromPoint(s1, p1.get_center()),
  11. )
  12. self.play(
  13.     GrowFromPoint(s2, p2.get_center(),
  14.                   grow_function=lambda t: t**2,
  15.     ),
  16. )
  17. self.play(
  18.     GrowFromPoint(s3, p3.get_center()),
  19. )
复制代码

2.5. SpinInFromNothing 示例

这里创建了三个差别边数的多边形。
在SpinInFromNothing动画中,为每个多边形设置了差别的旋转角度(angle)和初始颜色(point_color)。
通过差别的旋转角度和颜色设置,可以看到多边形从无到有并陪同着旋转和颜色变革的生长效果。
  1. # 创建多个多边形
  2. p1 = RegularPolygon(5).shift(LEFT * 2)
  3. p2 = RegularPolygon(6, color=RED)
  4. p3 = RegularPolygon(8, color=YELLOW).shift(RIGHT * 2)
  5. # 以不同旋转角度和颜色展示SpinInFromNothing动画
  6. self.play(
  7.     SpinInFromNothing(p1),
  8. )
  9. self.play(
  10.     SpinInFromNothing(p2, angle=np.pi),
  11. )
  12. self.play(
  13.     SpinInFromNothing(p3, angle=3 * np.pi / 2, point_color=PINK),
  14. )
复制代码

3. 附件

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

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

本帖子中包含更多资源

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

x
回复

举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表