• manimgl入门


    前言

    本来是想学CSAPP的,结果在B站上看到一个UP主的视频,里面整个视频动画看着很炫,很好玩。评论区看到是由manim做的,了解了下manim刚好也是python做的,正好也在学python,结果看了一期CSAPP就转战manim…

    使用过程中还是有好多坑的,比如使用新版的manimgl的线条显示不出来,网上说是把运行显卡由集显切换成独显,要不然就得切换成旧版。。。无奈刚开始是在平板上搭的环境,没有独显。于是切换到旧版manim,使用起来感觉不是很舒服。而且目前的学习资料仅限于官方文档和几位创作者的视频(都是字母动画,没有语音讲解),就重新在我的小本本上搭了环境,主要还是以看文档和源码为主,视频后面看吧!!!!

    官方文档网站:

    https://docs.manim.org.cn/

    快速入门

    manim/
    ├── manimlib/
    │   ├── animation/
    │   ├── ...
    │   ├── default_config.yml
    │   └── window.py
    ├── (custom_config.yml)
    └── start.py
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    start.py中写入如下代码,

    from manimlib import *
    
    class SquareToCircle(Scene):
        def construct(self):
            circle = Circle()
            circle.set_fill(BLUE, opacity=0.5)
            circle.set_stroke(BLUE_E, width=4)
    
            self.add(circle)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    此处运行命令:

    manimgl start.py SquareToCircle

    就会得到如下窗口:

    在这里插入图片描述
    在这里插入图片描述

    接下来介绍下具体执行过程。

    命令行执行

    命令格式

    manimgl code.py Scene flags

    • code.py:是你自己的Python文件(此处就是start.py)

    • Scene:是你所要渲染的场景;如果没有指定或写错,只有一个Scene,会直接渲染这个场景;多个场景时,会列出所有的让你选择(此处就是SquareToCircle)

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pi5eJmR8-1661696320630)(C:\Users\ZX\AppData\Roaming\Typora\typora-user-images\image-20220828181437013.png)]

      此处我在使用实例时,WriteStuff应该是老的一个例子,所以这会列出manim/example_scenes.py中实际所包含的例子来供我选择

    • flags:选项参数

      # 常用选项
      -w: 把场景写入文件(--write_file)
      -o: 把场景写入文件并打开(--open)
      -s: 跳到最后只展示最后一帧(--skip_animations)
          -so:保存最后一帧并打开
      -n <num>: 跳到场景中第n个动画(--start_at_animation_number)
      -f: 打开串口全屏(--full_screen)
      -c: 指定背景颜色(--color)
      --config_file: 指定配置文件
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    按键效果

    z键:滚动鼠标中键来缩放画面
    f键:移动鼠标来平移画面
    d键:同时移动鼠标来改变三维视角
    r键:恢复到图像最初视角
    q/esc键:关闭窗口并退出程序
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代码注释

    # 引入manimlib中的类
    from manimlib import *
    '''
    	定义一个Scene的子类,也就是想要编写渲染的场景
    	这个类名就是在运行命令时指定渲染场景时需要的
    '''
    class SquareToCircle(Scene):
        # 编写construct方法,其中定义了如何创建画面中的物体,以及相应的一系列操作
        def construct(self):
            # 创建一个Circle实例,也就是一个圆
            circle = Circle()
            # set_full()方法设置圆的填充颜色,以及透明度
            circle.set_fill(BLUE, opacity=0.5)
            # set_stroke()设置圆的线条,和线条宽度
            circle.set_stroke(BLUE_E, width=4)
            # add()方法,将圆添加到画面上
            self.add(circle)
            # add()也可以替换成play()方法,这样可以看到这个圆的绘制过程
            self.play(ShowCreation(circle))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    交互模式

    • 在代码结尾加入如下语句,会进入交互模式

    self.embed()

    如下就是交互模式,和jupyter的交互界面类似

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ypL0MLY2-1661696320635)(C:\Users\ZX\AppData\Roaming\Typora\typora-user-images\image-20220828212325859.png)]

    在交互界面输入一下指令

    # 在水平方向上拉伸到四倍
    self.play(circle.animate.stretch(4, dim=0))
    # 旋转180°
    self.play(Rotate(circle, TAU / 2))
    # 在向右移动2单位同时缩小为原来的1/4
    self.play(circle.animate.shift(2 * RIGHT), circle.animate.scale(0.25))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    将会得到如下动画:

    在这里插入图片描述

    动画转换

    在上面代码中添加一个正方形,将其在转化为圆形

    class SquareToCircle1(Scene):
        def construct(self):
            circle = Circle()
            circle.set_fill(TEAL_B, opacity=0.5)
            circle.set_stroke(BLUE_E, width=4)
            # 实例化一个正方形
            square = Square()
            square.set_fill(PURPLE_A, opacity=0.5)
            square.set_stroke(PURPLE_A, width=4)
    
            self.play(ShowCreation(square))
            self.wait()
            # 由正方形切换到圆形
            self.play(ReplacementTransform(square, circle))
            self.wait()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    则会得到如下动画
    在这里插入图片描述

    后续边学边更~~~~

  • 相关阅读:
    openssl中SM2、SM3、SM4使用实例
    什么是IPQC(制程控制)?
    学习Rust适合写什么练手项目?【云驻共创】
    UOS Vmware 拷贝文件问题
    Dubbo传输层及交换层实现
    【自动驾驶】常见位姿估计算法的比较: 三角测量、PNP、ICP、
    微软和OpenAI正在开发AI芯片, 并计划下个月发布
    Docker 介绍
    【大学复健】两种质朴的素数筛法
    【Linux】文件权限的理解
  • 原文地址:https://blog.csdn.net/Ghost_199503/article/details/126575402