本篇文章将深入探讨Manim
库中的两种旋转动画类:Rotate
和Rotating
,它们虽然名称相似,但在功能和应用场景上各有千秋。
Rotate
类专注于对图形对象进行精确的旋转操作,它允许用户指定旋转的角度、轴心点等,非常适合于几何图形的演示、物理模拟以及机械运动的展示等场合。
相对而言,Rotating
类则致力于创建一个持续旋转的效果,使对象围绕一个轴或点不断旋转,这在动态图标、天体运动模拟以及装饰性动态元素中尤为常见。
1. 动画概览
1.1. Rotate
Rotate
动画类是Manim
中用于旋转Mobject
对象的工具。
通过设定旋转的角度、轴心等参数,Rotate
能够实现精确的旋转效果。用户可以指定旋转的起始和终止角度,并调整旋转的速度,从而控制动画的播放速率。
以下是Rotate
的主要参数:
参数名称 | 类型 | 说明 |
---|---|---|
mobject | Mobject | 需要旋转的Mobject 对象 |
angle | float | 旋转的角度,以弧度为单位 |
axis | np.ndarray | 旋转的轴向,通过向量定义 |
about_point | [float] | 旋转的中心点 |
about_edge | [float] | 使用边界框点的方向作为旋转中心 |
请注意,about_point
和about_edge
不能同时使用,只有当about_point
为None
时,about_edge
才会生效。
1.2. Rotating
Rotating
动画类则更注重于创建一个持续的旋转效果。
它使得Mobject
对象能够围绕指定的轴或点持续旋转,通常用于创建动态的、循环的旋转场景。
用户可以设置旋转的方向(顺时针或逆时针),并且可以轻松地控制旋转的速度。
以下是Rotating
的主要参数:
参数名称 | 类型 | 说明 |
---|---|---|
mobject | Mobject | 需要旋转的Mobject 对象 |
radians | np.ndarray | 旋转的弧度值 |
axis | np.ndarray | 旋转的轴向 |
about_point | [float] | 旋转的中心点 |
about_edge | [float] | 使用边界框点的方向作为旋转中心 |
rate_func | func | 速率函数,用于控制动画随时间的进展速度 |
1.3. 两种旋转的差异与联系
Rotate
和Rotating
在功能上有明显的差异,同时也存在一定的联系。
在差异方面,Rotate
专注于精确控制旋转,具有明确的起始和终止角度,适合于需要一次性、角度明确的旋转操作,例如将一个三角形旋转30度以展示特定的几何关系。
而Rotating
则允许Mobject
对象持续旋转,没有终止角度的限制,适合于需要持续动态旋转的场景,如一个持续旋转的风车。
它们的联系在于,两者都用于实现旋转动画,并且都依赖于图形对象(Mobject
)和旋转轴、旋转中心这些基本要素。
在一些复杂的动画场景中,两者还可以结合使用,例如先用Rotate
将物体旋转到特定位置,再用Rotating
使其在该位置持续旋转。
2. 使用示例
接下来,我们将通过几个示例来展示Rotate
和Rotating
动画的使用。
2.1. Rotate 时钟指针旋转
在这个示例中,我们使用箭头线段来代表时钟指针,并通过Rotate
动画,使其围绕原点从12点位置旋转到3点位置(即旋转90度,对应π/2弧度)。
这个简单的模拟展示了Rotate
在模拟具有明确角度变化的场景中的应用。
d = Dot(color=BLUE)
c = Circle(color=YELLOW, radius=1)
self.add(d, c)
# 创建时钟指针(简单用线段表示)
hand = Arrow(ORIGIN, [0, 1, 0])
# 模拟时钟指针从 12 点位置旋转到 3 点位置
r_anim = Rotate(
hand,
angle=PI / 2,
axis=IN,
about_point=ORIGIN,
)
self.play(r_anim)
2.2. Rotating 风扇叶片旋转
在这个示例中,我们用两个矩形来表示风扇叶片,并使用Rotating
动画类,使叶片围绕其中心,沿着垂直屏幕向外的轴持续旋转,一圈又一圈,
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4386.html