1. 相机功能
Manim中的相机功能允许用户控制场景的视角、缩放和背景等。相机的主要类是Camera
,而Scene
类则包含了对相机的封装。
1.1 相机类型
- 标准相机:用于2D场景的基本相机。
- 3D相机:用于3D场景的相机,提供了更复杂的视角控制。
1.2 相机属性
-
背景颜色:可以设置相机的背景颜色。
self.camera.background_color = "#FFFFFF" # 设置为白色背景
-
相机位置:可以通过
move_to
、shift
等方法移动相机。self.camera.move_to(UP)
-
缩放:可以通过
scale
方法缩放相机视图。self.camera.scale(0.5) # 缩小到原来的50%
1.3 3D相机
在3D场景中,使用ThreeDScene
类来创建相机。可以通过set_camera_orientation
方法设置相机的方向。
class My3DScene(ThreeDScene):
def construct(self):
self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)
1.4 相机动画
相机的动画可以通过self.play
方法与相机的移动、缩放等结合使用。
self.play(self.camera.animate.move_to(UP))
2. 动画方式
Manim提供了多种动画方式来创建动态效果。动画的基本构成是通过self.play
方法来执行。
1. 基本动画类型
1.0Write 动画
Write
动画用于逐字显示文本或对象,通常用于在场景中引入文字或图形。这个动画会模拟手写的效果,使得对象逐渐显现出来。
使用方法
Write
动画的基本用法如下:
self.play(Write(text))
Manim提供了多种基本动画类型,以下是一些常用的动画及其示例:
from manim import *
class WriteAnimationExample(Scene):
def construct(self):
# 创建文本对象
text = Text("Hello, Manim!")
# 使用 Write 动画逐字显示文本
self.play(Write(text))
# 等待一段时间
self.wait(1)
# 消失动画
self.play(FadeOut(text))
# 运行命令
# manim -pql your_script.py WriteAnimationExample
1.1 创建动画
用于创建对象并将其显示在场景中。
self.play(Create(circle))
1.2 消失动画
用于让对象逐渐消失。
self.play(FadeOut(circle))
1.3 变换动画
用于将一个对象变换为另一个对象。
self.play(Transform(circle, square))
1.4 移动动画
用于移动对象到新的位置。
self.play(circle.animate.move_to(UP))
1.5 旋转动画
用于旋转对象。
self.play(Rotate(circle, angle=PI)) # 旋转180度
1.6 缩放动画
用于缩放对象的大小。
self.play(circle.animate.scale(2)) # 放大2倍
1.7 颜色变化动画
用于改变对象的颜色。
self.play(circle.animate.set_color(RED)) # 改变颜色为红色
1.8 透明度变化动画
用于改变对象的透明度。
self.play(circle.animate.set_opacity(0.5)) # 设置透明度为50%
1.9 组合动画
可以同时播放多个动画。
self.play(Create(circle), FadeIn(text))
1.10 动画顺序
可以通过wait
方法控制动画之间的停顿。
self.play(Create(circle)) self.wait(1) self.play(FadeOut(circle))
1.11 动画组
使用AnimationGroup
可以将多个动画组合在一起。
self.play(AnimationGroup(Create(circle), Create(square), lag_ratio=0.5))
1.12 动画序列
使用Succession
可以创建动画的顺序播放。
self.play(Succession(Create(circle), FadeOut(circle), run_time=2))
1.13 反向动画
可以使用reverse
方法反向播放动画。
self.play(Create(circle)) self.play(FadeOut(circle).reverse())
1.14 路径动画
可以让对象沿着路径移动。
self.play(MoveAlongPath(circle, Line(ORIGIN, RIGHT)))
1.15 震动动画
可以让对象震动。
self.play(circle.animate.shake())
1.151. 示例代码
以下是一个完整的示例,展示了多种基本动画的结合使用:
from manim import *
class ExtendedBasicAnimations(Scene):
def construct(self):
# 创建对象
circle = Circle(color=BLUE).shift(LEFT)
square = Square(color=RED).shift(RIGHT)
text = Text("Hello, Manim!").shift(UP)
# 创建动画
self.play(Create(circle))
self.play(Create(square))
self.play(Create(text))
# 移动动画
self.play(circle.animate.move_to(UP))
# 旋转动画
self.play(Rotate(square, angle=PI / 4)) # 旋转45度
# 变换动画
self.play(Transform(circle, square))
# 颜色变化动画
self.play(square.animate.set_color(GREEN))
# 透明度变化动画
self.play(square.animate.set_opacity(0.5))
# 消失动画
self.play(FadeOut(circle), FadeOut(square), FadeOut(text))
# 运行命令
# manim -pql your_script.py ExtendedBasicAnimations
1.16. 复杂动画
可以使用AnimationGroup
和Succession
来创建复杂的动画序列。
from manim import *
class ComplexAnimation(Scene):
def construct(self):
circle = Circle()
square = Square()
self.play(Create(circle))
self.play(Succession(
FadeOut(circle),
Create(square),
Rotate(square, angle=PI),
run_time=3
))
3. 示例代码
以下是一个完整的示例,展示了相机功能和动画方式的结合使用:
from manim import *
class CameraAndAnimationExample(Scene):
def construct(self):
# 设置背景颜色
self.camera.background_color = "#FFFFFF"
# 创建对象
circle = Circle(color=BLUE).shift(LEFT)
square = Square(color=RED).shift(RIGHT)
# 播放创建动画
self.play(Create(circle))
self.play(Create(square))
# 相机移动
self.play(self.camera.animate.move_to(UP))
# 变换动画
self.play(Transform(circle, square))
# 等待
self.wait(1)
# 消失动画
self.play(FadeOut(circle), FadeOut(square))
# 运行命令
# manim -pql your_script.py CameraAndAnimationExample