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

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)

此处运行命令:

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: 指定配置文件
    

按键效果

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

代码注释

# 引入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))

交互模式

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

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))

将会得到如下动画:

在这里插入图片描述

动画转换

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

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()

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

后续边学边更~~~~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ghost_199503

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值