安装manim
预备:需要conda环境
Required Dependencies
There are several package managers that work with conda packages, namely conda, mamba and pixi.
After installing your package manager, you can create a new environment and install manim inside by running
# using conda or mamba
conda create -n my-manim-environment
conda activate my-manim-environment
conda install -c conda-forge manim
# using pixi
pixi init
pixi add manim
在vscode中使用自己创建的python 解释器
方式:ctrl+p 输入select interprer 选择自己创建好的环境
建立一个工作空间/project
创建文件scene.py
好的,让我们逐一解释您提供的Manim代码中的每个场景的逻辑:
1. `CreateCircle` 类: - 这个场景的目的很简单,就是创建一个圆形。 - `Circle()` 创建了一个默认的圆形。 - `circle.set_fill(PINK, opacity=0.5)` 将圆形的填充颜色设置为粉色,并且透明度设置为0.5。 - `self.play(Create(circle))` 播放创建圆形的动画。
from manim import *
class CreateCircle(Scene):
def construct(self):
circle=Circle()
circle.set_fill(PINK,opacity=0.5)
self.play(Create(circle))
CreateCircle
2. `SquareToCircle` 类: - 这个场景展示了一个正方形变换成圆形的过程。 - `Circle()` 和 `Square()` 分别创建了圆形和正方形。 - `square.rotate(PI/4)` 将正方形旋转45度。 - `self.play(Create(square))` 播放创建正方形的动画。 - `self.play(FadeOut(square))` 播放使正方形逐渐消失的动画。 - `self.play(Transform(square, circle))` 播放将正方形变换成圆形的动画。
class SquareToCircle(Scene):
def construct(self):
circle=Circle()
square=Square()
circle.set_fill(PINK,opacity=0.5)
square.rotate(PI/4)
self.play(Create(square))
self.play(FadeOut(square))
self.play(Transform(square,circle))
SquareToCircle
3. `SquareToCircle1` 类: - 这个场景创建了一个圆形和一个正方形,并将它们放在一起,然后使它们同时消失。 - `square.set_fill(BLUE, opacity=0.5)` 设置正方形的填充颜色为蓝色,透明度为0.5。 - `square.next_to(circle, RIGHT, buff=0.5)` 将正方形放置在圆形的右侧,间隔为0.5。 - `self.play(Create(square), Create(circle))` 同时播放创建正方形和圆形的动画。 - `self.play(FadeOut(square), FadeOut(circle))` 同时播放使正方形和圆形消失的动画。
class SquareToCircle1(Scene):
def construct(self):
circle=Circle()
square=Square()
circle.set_fill(PINK,opacity=0.5)
square.set_fill(BLUE,opacity=0.5)
square.next_to(circle,RIGHT,buff=0.5)
self.play(Create(square),Create(circle))
self.play(FadeOut(square),FadeOut(circle))
SquareToCircle1
4. `AnimatedSquareToCircle` 类: - 这个场景创建了一个正方形,并对其进行了旋转和变换成圆形的动画,最后改变了圆形的填充颜色。 - `self.play(Create(square))` 播放创建正方形的动画。 - `self.play(square.animate.rotate(PI/4))` 播放正方形旋转45度的动画。 - `self.play(Transform(square, circle))` 播放将正方形变换成圆形的动画。 - `self.play(square.animate.set_fill(PINK, opacity=0.5))` 在变换完成后,播放将圆形的填充颜色设置为粉色,透明度为0.5的动画。
class AnimatedSquareToCircle(Scene):
def construct(self):
circle=Circle()
square=Square()
self.play(Create(square))
self.play(square.animate.rotate(PI/4))
self.play(Transform(square,circle))
self.play(square.animate.set_fill(PINK,opacity=0.5))
AnimatedSquareToCircle
5. `DifferentRotations` 类: - 这个场景展示了两个不同颜色的正方形以不同的方式旋转。 - `left_square.shift(2 * LEFT)` 和 `right_square.shift(2 * RIGHT)` 分别将两个正方形移动到场景的左右两侧。 - `self.play(left_square.animate.rotate(PI), Rotate(right_square, angle=PI), run_time=2)` 同时播放两个正方形旋转180度的动画,动画持续时间为2秒。 - `self.wait()` 等待一段时间,让动画完成。
class DifferentRotations(Scene):
def construct(self):
left_square = Square(color=BLUE, fill_opacity=0.7).shift(2 * LEFT)
right_square = Square(color=GREEN, fill_opacity=0.7).shift(2 * RIGHT)
self.play(
left_square.animate.rotate(PI), Rotate(right_square, angle=PI), run_time=2
)
self.wait()
DifferentRotations
6. `TwoTransforms` 类: - 这个场景展示了两种不同的变换方式:`Transform` 和 `ReplacementTransform`。 - `transform` 方法中,一个圆形先后变换成正方形和三角形。 - `replacement_transform` 方法中,一个圆形替换为正方形,然后正方形替换为三角形。 - `self.play(Transform(a, b))` 播放将圆形a变换为正方形b的动画。 - `self.play(ReplacementTransform(a, b))` 播放将圆形a替换为正方形b的动画。 - `self.wait(0.5)` 在两种变换方式之间等待0.5秒。
这些场景展示了Manim库在创建几何形状动画方面的能力,包括创建、变换、旋转和颜色填充等操作。
class TwoTransforms(Scene):
def transform(self):
a = Circle()
b = Square()
c = Triangle()
self.play(Transform(a, b))
self.play(Transform(a, c))
self.play(FadeOut(a))
def replacement_transform(self):
a = Circle()
b = Square()
c = Triangle()
self.play(ReplacementTransform(a, b))
self.play(ReplacementTransform(b, c))
self.play(FadeOut(c))
def construct(self):
self.transform()
self.wait(0.5) # wait for 0.5 seconds
self.replacement_transform()
TwoTransforms
在终端输入:
python3 -m manim scene.py <类的名称如:CreateCircle>
启动相应的.py文件后,在同级目录下可以看到media文件夹,manim生成的动画就存放在文件夹中。
整体代码如下:
from manim import *
class CreateCircle(Scene):
def construct(self):
circle=Circle()
circle.set_fill(PINK,opacity=0.5)
self.play(Create(circle))
class SquareToCircle(Scene):
def construct(self):
circle=Circle()
square=Square()
circle.set_fill(PINK,opacity=0.5)
square.rotate(PI/4)
self.play(Create(square))
self.play(FadeOut(square))
self.play(Transform(square,circle))
class SquareToCircle1(Scene):
def construct(self):
circle=Circle()
square=Square()
circle.set_fill(PINK,opacity=0.5)
square.set_fill(BLUE,opacity=0.5)
square.next_to(circle,RIGHT,buff=0.5)
self.play(Create(square),Create(circle))
self.play(FadeOut(square),FadeOut(circle))
class AnimatedSquareToCircle(Scene):
def construct(self):
circle=Circle()
square=Square()
self.play(Create(square))
self.play(square.animate.rotate(PI/4))
self.play(Transform(square,circle))
self.play(square.animate.set_fill(PINK,opacity=0.5))
class DifferentRotations(Scene):
def construct(self):
left_square = Square(color=BLUE, fill_opacity=0.7).shift(2 * LEFT)
right_square = Square(color=GREEN, fill_opacity=0.7).shift(2 * RIGHT)
self.play(
left_square.animate.rotate(PI), Rotate(right_square, angle=PI), run_time=2
)
self.wait()
class TwoTransforms(Scene):
def transform(self):
a = Circle()
b = Square()
c = Triangle()
self.play(Transform(a, b))
self.play(Transform(a, c))
self.play(FadeOut(a))
def replacement_transform(self):
a = Circle()
b = Square()
c = Triangle()
self.play(ReplacementTransform(a, b))
self.play(ReplacementTransform(b, c))
self.play(FadeOut(c))
def construct(self):
self.transform()
self.wait(0.5) # wait for 0.5 seconds
self.replacement_transform()
文章链接
发表评论