manim学习指南

(一)manim的介绍

manim是博主3b1b开源了一款可以制作数学动画了库,他制作了数学动画风格十分高级

官网代码

form manim import *
class ContinuousMotion(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[0] / 2) * UR + np.cos(pos[1] / 2) * LEFT
        stream_lines = StreamLines(func, stroke_width=2, max_anchors_per_line=30)
        self.add(stream_lines)
        stream_lines.start_animation(warm_up=False, flow_speed=1.5)
        self.wait(stream_lines.virtual_time / stream_lines.flow_speed)</pre>

官网展示效果

官网地址

github地址

(二)自我学习探索

manim也是支持中文编写了,其中只需要在Text方法中font这个参数导入合适的字体文件路径就可以,但是作者参试直接把本地文件字体直接复制过来发现,manim不能直接识别到对应的文件,而作者使用的方法是直接写入Windows的自带字体。

作者方法
 font="STKaiti"

(三)完整代码,以及详细分析

from manim import *
class TextToHeartTransform(Scene):
    def construct(self):
        # 创建汉字文本
        text = Text("我是刘健了爸爸,爸爸永远爱你", font="STKaiti", color=RED_D).scale(1)
        # 创建爱心图像(使用参数方程绘制爱心)
        heart_curve = ParametricFunction(
            lambda t: np.array([
                16 * np.sin(t) ** 3,
                13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t),
                0
            ]),
            t_range=np.array([0, TAU]),
            color=RED
        ).scale(0.15).move_to(ORIGIN)  # 缩放使得爱心大小适合转化
        # 先展示汉字文本
        self.play(Write(text))
        self.wait(1)
        # 将汉字转换为爱心图像
        self.play(Transform(text, heart_curve))
        self.wait(2)</pre>

1. Text()

text = Text("我是刘健了爸爸,爸爸永远爱你", font="STKaiti", color=RED_D).scale(1)
  • 功能:创建一个文本对象。
  • 参数
    • font="STKaiti":指定使用的字体。
    • color=RED_D:指定文本的颜色。
    • .scale(1):缩放文本的大小。

2. ParametricFunction()

heart_curve = ParametricFunction(
    lambda t: np.array([
        16 * np.sin(t) ** 3,
        13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t),0
    ]),
    t_range=np.array([0, TAU]),
    color=RED
).scale(0.15).move_to(ORIGIN)</pre>
  • 功能:创建一个参数方程曲线对象,用于绘制爱心形状。
  • 参数
    • lambda t: np.array([...]):定义曲线的参数方程。
    • t_range=np.array([0, TAU]):设置参数 t 的范围,从 (0) 到 (2\pi)。
    • color=RED:设置曲线颜色为红色。
    • .scale(0.15):缩放爱心形状的大小。
    • .move_to(ORIGIN):将爱心图像移动到屏幕中心(原点位置)。

3. self.play()

  • 功能:用于播放动画。
  • 用法示例
    • self.play(Write(text)):将文本对象逐字写出,展示在屏幕上。
    • self.play(Transform(text, heart_curve)):将文本平滑地转换为爱心图像。

4. Write()

self.play(Write(text))
  • 功能:创建一种逐字展示文本的动画效果,将文本从无到有逐步显示出来。
  • 参数text 是要展示的文本对象。

5. 最重要的方法Transform()

self.play(Transform(text, heart_curve))
  • 功能:将一个对象转换为另一个对象,创建平滑过渡的动画效果。
  • 参数Transform(text, heart_curve)text 对象转换为 heart_curve 对象,实现从文本到爱心的渐变动画。

6. self.wait()

self.wait(1)
self.wait(2)
  • 功能:在动画播放过程中插入暂停,延迟一定时间,以便观众有时间观看当前画面。
  • 参数1 表示暂停 1 秒,2 表示暂停 2 秒。

代码总结

这段代码的核心流程是:

  1. 使用 Text() 创建并展示文本。
  2. 使用 ParametricFunction() 创建爱心图像。
  3. 使用 Write() 播放逐字显示文本的动画。
  4. 使用 Transform() 将文本平滑转换为爱心图像。
  5. 使用 wait() 暂停,以便观众有足够的时间观看每个动画效果。

主要使用的 Manim 方法:

  • 创建文本和图像Text()ParametricFunction()
  • 动画播放self.play()
  • 具体动画效果Write()Transform()
  • 暂停self.wait()

(四)效果展示

暂无评论

发送评论 编辑评论


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