安装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()

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: