3blue1brown 基于conda制作manim数学动画教程(手把手教学 持续更新)

安装manim

预备:需要conda环境

Required Dependencies

There are several package managers that work with conda packages, namely condamamba 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()

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值