manim视频

视频展示

代码展示

from manim improt*
​
class Liujian(Scene):
    def construct(self):
        tex_template = TexTemplate()
        tex_template.add_to_preamble(r"\usepackage{ctex}")  # 添加 ctex 模板
​
        # 题目
        text_1 = Tex(r"高斯积分", tex_template=tex_template, font_size=120, color=BLUE_B)
        self.play(Write(text_1))
        self.wait(1)
​
        # 平移并显示新的公式
        text_2 = Tex(r"$\int^{\infty}_0 e^{-x^2} dx$", tex_template=tex_template, font_size=90, color=RED_A)
        self.play(text_1.animate.shift(LEFT * 2.25).scale(3 / 4), Write(text_2.move_to([2, 0, 0])))
        self.wait(1)
        self.play(FadeOut(text_1), text_2.animate.move_to(ORIGIN).scale(1.5))
​
        # 进行下一步的公式转换
        text_3 = Tex(r"$I^{2} = \int_{0}^{\infty} e^{-x^{2}} dx \cdot \int_{0}^{\infty} e^{-x^{2}} dx$", 
                     tex_template=tex_template, font_size=90, color=RED_A)
        
        self.play(text_2.animate.move_to([0, 2, 0]))
        self.wait(0.5)
        self.play(Write(text_3))
​
        # 使用 ReplacementTransform 进行转换
        text_4 = Tex(r"$I^{2} = \int_{0}^{\infty} e^{-x^{2}} dx \int_{0}^{\infty} e^{-y^{2}} dy$", 
                     font_size=90, color=RED_A)
        self.play(FadeOut(text_2),ReplacementTransform(text_3, text_4))
        self.wait(0.5)
​
        text_5 = Tex(r"$I^2 = \int_{0}^{\infty} e^{-(x^{2}+y^{2})} dx dy$", font_size=90, color=BLUE_B)
        self.play(ReplacementTransform(text_4, text_5))
        self.wait(0.8)
        text_6 = Tex(r"换元 $x = tcos({\alpha}),y=tsin({\alpha})$",tex_template=tex_template, font_size=90, color=BLUE_B).move_to([0, 2, 0])
        self.play(Write(text_6))
        self.wait(0.5)
        text_7 = Tex(r"""$I^{2}=\int_{0}^{2 \pi}\int_{0}^{\infty} e^{-\left(x^{2}+y^{2}\right)}\begin{vmatrix}
                     \frac{\mathrm{d}x}{\mathrm{d}\alpha }{}  & \frac{\mathrm{d}x}{\mathrm{d}t }{}\\
                      \frac{\mathrm{d}y}{\mathrm{d}\alpha }{}&\frac{\mathrm{d}y}{\mathrm{d}t }{}
                    \end{vmatrix} d  {\alpha}d t$""",tex_template=tex_template, font_size=90, color=BLUE_B).scale(0.75)
​
        self.play(FadeOut(text_6),ReplacementTransform(text_5,text_7))
        self.wait(0.5)
        text_8 = Tex(r"""$I^2 = \int_0^{2\pi}\int_0^{\infty}e^{-t^2}{}t d\alpha dt$""",tex_template=tex_template, font_size=90, color=BLUE_B)
        self.play(ReplacementTransform(text_7,text_8))
        self.wait(0.5)
        text_9 = Tex(r"""$I^2 = 2\pi \int_0^{\infty}e^{-t^2}{}t dt$""",tex_template=tex_template, font_size=90, color=BLUE_B)
        self.play(ReplacementTransform(text_8,text_9))
        self.wait(0.5)
        text_10 = Tex(r"""$I^2 = 2\pi \int_0^{\infty}e^{-t^2}{}d{\frac{1}{2}t^{2}}$""",tex_template=tex_template, font_size=90, color=BLUE_B)
        self.play(ReplacementTransform(text_9,text_10))
        self.wait(0.5)
        text_11 = Tex(r"""$I^2 = \pi \int_0^{\infty}e^{-t^2}{}dt^{2}$""",tex_template=tex_template, font_size=90, color=BLUE_B)
        self.play(ReplacementTransform(text_10,text_11))
        self.wait(0.5)
        text_12 = Tex(r"""$ I^2 = -\pi e^{-t^2}\bigg|_0^{\infty}$""",tex_template=tex_template, font_size=90, color=BLUE_B)
        self.play(ReplacementTransform(text_11,text_12))
        self.wait(0.5)
        text_13 = Tex(r"""$I^2 = \pi$""",tex_template=tex_template, font_size=90, color=BLUE_B)
        self.play(ReplacementTransform(text_12,text_13))
        self.wait(0.5)
        text_14 = Tex(r"""$I = \sqrt{\pi}$""",tex_template=tex_template, font_size=130, color=YELLOW_B)
        self.play(ReplacementTransform(text_13,text_14))
        self.wait(1)
        
%manim -pqh Liujian</pre>

上面是我写的屎山代码,命名方式和代码规则都是很不规范了。上面的积分区间结果是$-\infty$到$\infty$的,这里我弄错误了

下面是ai修改之后,整体结构更加的舒适了

class Liujian(Scene):
    def construct(self):
        tex_template = TexTemplate()
        tex_template.add_to_preamble(r"\usepackage{ctex}")  # 添加 ctex 模板
​
        # 1. 显示标题
        text_1 = Tex(r"高斯积分", tex_template=tex_template, font_size=120, color=BLUE_B)
        self.play(Write(text_1))
        self.wait(1)
​
        # 2. 显示积分公式并调整位置
        text_2 = Tex(r"$\int^{\infty}_0 e^{-x^2} dx$", tex_template=tex_template, font_size=90, color=RED_A)
        self.play(text_1.animate.shift(LEFT * 2.25).scale(3 / 4), Write(text_2.move_to([2, 0, 0])))
        self.wait(1)
        self.play(FadeOut(text_1), text_2.animate.move_to(ORIGIN).scale(1.5))
​
        # 3. 逐步转换公式
        formula_steps = [
            r"$I^{2} = \int_{\infty}^{\infty} e^{-x^{2}} dx \cdot \int_{0}^{\infty} e^{-x^{2}} dx$",
            r"$I^{2} = \int_{\infty}^{\infty} e^{-x^{2}} dx \int_{0}^{\infty} e^{-y^{2}} dy$",
            r"$I^2 = \int_{\infty}^{\infty} e^{-(x^{2}+y^{2})} dx dy$",
            r"换元 $x = t \cos(\alpha), y = t \sin(\alpha)$",
            r"""$I^{2}=\int_{\infty}^{2 \pi}\int_{0}^{\infty} e^{-\left(x^{2}+y^{2}\right)}
            \begin{vmatrix}
                \frac{\mathrm{d}x}{\mathrm{d}\alpha} &amp; \frac{\mathrm{d}x}{\mathrm{d}t} \\
                \frac{\mathrm{d}y}{\mathrm{d}\alpha} &amp; \frac{\mathrm{d}y}{\mathrm{d}t}
            \end{vmatrix} d \alpha dt$""",
            r"$I^2 = \int_0^{2\pi}\int_0^{\infty}e^{-t^2} t d\alpha dt$",
            r"$I^2 = 2\pi \int_0^{\infty}e^{-t^2} t dt$",
            r"$I^2 = 2\pi \int_0^{\infty}e^{-t^2} d\left(\frac{1}{2}t^{2}\right)$",
            r"$I^2 = \pi \int_0^{\infty} e^{-t^2} dt^{2}$",
            r"$I^2 = -\pi e^{-t^2} \bigg|_0^{\infty}$",
            r"$I^2 = \pi$",
            r"$I = \sqrt{\pi}$"
        ]
​
        # 4. 使用 ReplacementTransform 逐步替换公式
        text_current = text_2  # 起始公式
        for formula in formula_steps:
            text_next = Tex(formula, tex_template=tex_template, font_size=90, color=BLUE_B).scale(0.75)
            self.play(ReplacementTransform(text_current, text_next))
            self.wait(0.5)
            text_current = text_next  # 更新当前公式
​
%manim -pqh Liujian</pre>

本次使用到了指令有,如下几个:

文本对象创建

  1. Tex:用于创建基于 LaTeX 排版的文本对象,适合显示数学公式和带中文的文本。
    • 主要参数
      • tex_template=tex_template:应用前面定义的自定义模板。使用 tex_template 参数可以添加对中文支持的模板。
      • font_size=<number>:控制文本的字体大小。例如 font_size=120 表示文本大小为 120。
      • color=<Color>:设置文本颜色。Manim 内置了一些颜色(例如 BLUE_BRED_A 等),也可以使用 RGB 值定义颜色。
    • 示例:text_1 = Tex(r”高斯积分”, tex_template=tex_template, font_size=120, color=BLUE_B)

动画指令

  1. Write:让文本在屏幕上逐渐显现出来。
    • 适用对象:任何 Mobject 对象(如 Tex 文本对象)。
    • 参数:直接传入需要显示的对象。
    • 示例:self.play(Write(text_1))
  2. FadeOut:使对象从视图中淡出,逐渐消失。
    • 适用对象:任何 Mobject 对象。
    • 参数:直接传入需要淡出的对象。
    • 示例:self.play(FadeOut(text_1))
  3. ReplacementTransform:将一个对象平滑替换为另一个对象,适合用于公式推导过程的动画切换。
    • 适用对象:任何 Mobject 对象,可以是 Tex 文本或其他图形对象。
    • 参数
      • 第一个参数为要替换的对象。
      • 第二个参数为替换后的对象。
    • 示例:self.play(ReplacementTransform(text_3, text_4))
  4. animate.shift():移动对象的位置。常用于将对象移动到新的位置,以便展示新内容。
    • 适用对象:任何 Mobject 对象。
    • 参数:直接指定平移的方向和距离,通常用向量表示。例如 LEFT * 2.25 表示向左移动 2.25 个单位。
    • 示例:self.play(text_1.animate.shift(LEFT * 2.25))
  5. scale():缩放对象的大小。
    • 适用对象:任何 Mobject 对象。
    • 参数:传入缩放比例。例如 scale(1.5) 表示放大 1.5 倍,scale(3 / 4) 表示缩小至 3/4 大小。
    • 示例:self.play(text_1.animate.scale(3 / 4))
  6. move_to():将对象移动到特定位置。
    • 适用对象:任何 Mobject 对象。
    • 参数:传入坐标,例如 [2, 0, 0] 表示移动到坐标 (2, 0, 0)
    • 示例:self.play(text_2.move_to([2, 0, 0]))

网站显示问题:

最后再说一下,由于网站嵌入的这段代码,所以代码中的文本都是直接给渲染成了公式

<script>
MathJax = {
  tex: {
    inlineMath: [['$', '$'], ['\\(', '\\)']],
    displayMath: [['$$', '$$'], ['\\[', '\\]']],
    processEscapes: true
  },
  svg: {
    fontCache: 'global'
  }
};
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-svg.js"></script>

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇