3b1b动画

这篇演示的效果如下:

这是一个较为高级的Manim动画, 动画为3B1B的动画, 需要具备一定的基础知识. 本篇我就来说说这个动画的实现, 其中的一些方法还是很值得大家借鉴的.

准备工作

安装下面这个 Latex, 然后就可以使用更丰富的符号了.

Windows - TeX Live - TeX Users Group 下载 install-tl-windows.exe

自定义动画 FadeInFromPoint 和 FadeOutToPoint.

这两个动画在 Manim 中并没有, 但是我发现在 3b1b 的动画源码中使用的还挺频繁的, 所以干脆抽两个自定义的动画类, 方便后续使用. 大家也可以拿小本本记好, 方便后续直接使用.

FadeInFromPoint

from manim import *


class FadeInFromPoint(Animation):
    def __init__(self, mobject: Mobject, point: np.ndarray, **kwargs):
        super().__init__(mobject, **kwargs)
        self.point = point
        self.end = mobject.copy()

    def begin(self) -> None:
        super().begin()
        self.starting_mobject.move_to(self.point)
        self.starting_mobject.scale(0.1)

    def interpolate_mobject(self, alpha: float) -> None:
        new_alpha = self.rate_func(alpha)
        self.mobject.become(self.starting_mobject)
        self.mobject.scale(new_alpha * 10).move_to(self.point + new_alpha * (self.end.get_center() - self.point))

FadeOutToPoint

from manim import *


class FadeOutToPoint(Animation):
    def __init__(self, mobject: Mobject, point: np.ndarray, **kwargs):
        super().__init__(mobject, remover=True, **kwargs)
        self.point = point

    def interpolate_mobject(self, alpha: float) -> None:
        new_alpha = self.rate_func(alpha)
        self.mobject.become(self.starting_mobject)
        self.mobject.scale(1 - new_alpha).move_to(self.starting_mobject.get_center() + new_alpha * (self.point - self.starting_mobject.get_center()))

代码实现

代码流程:

  • 创建一个机器的图形, 使用 VGroup 自动将两个三角形对称排列, 然后使用 Union 将多个图形取并集, 设置 z_index=1 表示会覆盖住默认的其他图形.
  • 使用 VGroup 竖向排列 24 个数字.
  • 循环 12 次, 每次将数字向上挪一个, 然后让数字进入机器, 再让符号从机器出来, lag_ratio=0.4 表示两个动画重叠执行.
  • 最后让除了 12 以外的其他数字透明度降低, 同时创建一个矩形外边框圈住 12.

源码我放在公众号"算法铁金库", 欢迎关注并查看.

 

### 3b1b 动画制作环境(Manim)设置 #### 环境需求与依赖项 为了设置 3b1b 的动画制作环境(Manim),需要确保安装了以下依赖项。Manim 是一个基于 Python 的数学动画引擎,广泛用于制作高质量的数学动画视频[^4]。以下是 Manim 的主要依赖项: - **Python**:建议使用 Python 3.8 或更高版本。 - **Manim**:可以通过官方仓库或社区分支安装。 - **LaTeX**:用于渲染文本和公式。 - **FFmpeg**:用于处理视频文件。 - **SoX**:用于音频处理。 #### 安装步骤说明 在 Windows、Linux 和 macOS 上安装 Manim 的方法略有不同。以下是通用的安装指南: 1. **安装 Python**: 确保系统中已安装 Python,并将 `python` 和 `pip` 添加到环境变量中[^5]。 2. **安装 Manim 社区版**: 使用 pip 安装 Manim 社区版: ```bash pip install manimgl ``` 如果需要使用最新的开发版本,可以克隆 GitHub 仓库: ```bash git clone https://github.com/3b1b/manim.git cd manim pip install -e . ``` 3. **安装 LaTeX**: 在 Windows 上推荐安装 MiKTeX,在 Linux 和 macOS 上推荐安装 TeX Live[^6]。 4. **安装 FFmpeg 和 SoX**: 下载并安装 FFmpeg 和 SoX,确保它们的路径被添加到系统的环境变量中。 #### 配置与测试 完成安装后,可以通过运行示例代码来测试环境是否正常工作。以下是一个简单的 Manim 示例代码: ```python from manim import * class SquareToCircle(Scene): def construct(self): circle = Circle() # 创建一个圆 square = Square() # 创建一个正方形 square.flip(RIGHT) # 翻转正方形 square.rotate(-3 * TAU / 8) # 旋转正方形 circle.set_fill(PINK, opacity=0.5) # 设置圆的颜色和透明度 self.play(Create(square)) # 渲染正方形 self.play(Transform(square, circle)) # 将正方形转换为圆 self.play(FadeOut(square)) # 淡出圆 ``` 运行上述代码时,请确保在终端中执行以下命令: ```bash manim -pql your_script.py SquareToCircle ``` #### 常见问题与解决方案 1. **依赖缺失**:如果某些依赖未正确安装,可能会导致渲染失败。请检查所有依赖是否完整安装[^7]。 2. **路径配置错误**:确保 LaTeX、FFmpeg 和 SoX 的路径已正确添加到环境变量中。 3. **Python 版本不兼容**:确保使用的 Python 版本符合 Manim 的要求。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值