Manim文档及源码笔记-入门04-SVG图片及文字

Manim文档及源码笔记-初级04-SVG图片及文字

涉及方法:
SVGMobjectImageMobjectTextMobjectTexMobjectTextLaTeXcairo

素材文件夹

在manim中使用外部图片或SVG文件时,可以直接使用绝对路径定位文件;也可以放在与manim.py、manimlib同级的文件夹内,使用相对路径。

"C:\\...\\manim\\picture.png"
"/home/.../manim/picture.png"
manim/
  ├─manim.py
  └─mediamlib
  |  └─ ...
  ├─picture.png
  └─svg_file.png

但更推荐的方法是放在素材目录asset/中;

asset/目录并不自带,所以要自己在manim.py的统计目录中创建文件夹:

manim/
  ├─manim.py
  └─mediamlib
  |  └─ ...
  └─assets

asset/文件夹下还要创建三个子文件夹,分别是:
raster_images/svg_images/sounds/(一般不用)

manim/
  ├─manim.py
  └─mediamlib
  |  └─ ...
  └─assets
     ├─ raster_images
     ├─ svg_images
     └─ sounds   

把需要使用的图片素材放到assets/raster_images/中,需要使用的SVG素材放到assets/svg_images/中:

manim/
  ├─manim.py
  └─mediamlib
  |  └─ ...
  └─assets
     ├─ raster_images
     |   └─picture.png  
     ├─ svg_images
     |   └─svg_file.svg  
     └─ sounds   

这样之后,仅仅使用文件名(后缀名可省略)manim就可以自动定位到对应文件。

manim中插入SVG

manim中插入SVG图片直接使用SVGMobject即可:

>>> mob = SVGMobject(
	
	)

传入的唯一参数为一个字符串,指向SVG文件(具体写法见上一部分);
关键字参数有stroke_width(路径粗细)等和VMobject共有的属性;

>>> mob = SVGMobject(
	"coin.svg",
	color = BLUE,
	stroke_width = 5.00
	)

由于SVGMobject是VMobject的子类,所以可以使用所有动画效果。

>>> mob = SVGMobject(
	"coin.svg",
	color = BLUE,
	stroke_width = 5.00
	)
>>> self.play(Uncreate(mob))

另外,SVGMobject能够处理的和显示有关的SVG元素只有如下几个:
path,rect,circle,ellipse,polygon,polyline;

<?xml ...>
...
<svg ...>
<path d="........." ... />
<rect width="..." height="..." x="..." y="..." ... />
<circle cx="..." cy="..."  r="..." ... /> 
<ellipse cx="..." cy="..."  rx="..." ry="..." ... />
<polygon points="... ..." ... />
<polyline potins="... ..." ... />
<image ... />
<text x="..." y="..." ...> ... </text>
</svg>

而其余的元素(例如image和text)都会省略,所以制作SVG时需要注意。

manim中插入图片

在manim中插入图片,需要使用ImageMobject:

>>> img = ImageMobject(
	
	)

与SVGMobject类似,传入一个参数表示图片文件名(jpg,png,gif均可);
height表示插入图片的高度(默认为2),invert表示是否反色(默认False)。

>>> mob = SVGMobject(
		"up.png",
		height=3,
		invert=True
	)

ImageMobject不是VGMobject的子类,所以有很多动画无法使用:

>>> mob = SVGMobject(
		"up.png",
		height=3,
		invert=True
	)
>>> # self.play(Uncreate(img)) ×
>>> # self.play(Transform(img, square)) ×
>>> self.paly(FadeOut(img))

manim中使用文字

在manim中使用文字,可以使用TextMobject(利用LaTeX编译转换出SVG):

>>> text = TextMobject(
	
	)

传入一个字符串,来表示显示的文字(会套入模板中使用xelatex编译);
其他属性和VMobject的均相同,也可以使用所有动画效果。

>>> img = ImageMobject(
		"Text文字",
		color=BLUE,
		background_stroke_color=RED
	)
>>> self.paly(Uncreate(text))

注意:其中需要使用LaTeX命令的\都需要替换为\\转义,或在字符串前加’r’。
一个TextMobject中也可以传入多个字符串,会单独编译,连在一起显示。

>>> img = ImageMobject(
		"Text文字",
		color=BLUE,
		background_stroke_color=RED
	)
>>> self.paly(Uncreate(text))
>>> text2 = TextMobject(
		"\\LaTeX\\\\换行")
>>> text3 = TextMobject(
		r"\LaTeX")
>>> text4 = TextMobject(
		"ab", "cde")

一个TextMobject包含一个或多个子物体,指向传入的每个字符串:

text = TextMobject("ab", "cde")

而下一级的子物体,就是这个字符串里的每条路径了(一般是字符),所以可以通过两级下表来访问到每个字符:
在这里插入图片描述
书写公式常使用TexMobject,即LaTeX的align*环境:

>>> tex = TexMobject(
	
	)

使用LaTeX的数学公式语法编写公式,结构也和TextMobject类似:

>>> tex = TexMobject(
		"\\sum^n_{i=1}i^3=?"
	).scale(2)
>>> debugTeX(self, tex[0]
	# ↑自定义的显示子物体下表的函数
	# 在manim_sandbox中有定义

>>> debugTeX(self, tex[0]
而TextMobject和TexMobject的区别在于:

  • TextMobject直接将内容写在LaTeX的document中;
  • 而TexMobject使用了LaTeX的align*公式环境;
\documentclass[preview]{standalone}
\usepackage{...}
...
\usepackage{...}
\begin{document}

TextMobject

\end{document}
\documentclass[preview]{standalone}
\usepackage{...}
...
\usepackage{...}
\begin{document}
\begin{align*}
TextMobject
\end{align*}
\end{document}

所以对于文字和公式,这两种写法是等价的:
TextMobject(“文字$公式$”)↔TexMobject(“\text{文字}公式”)

关于LaTeX公式的预览和教程,可以尝试“妈咪叔”维护的www.latexlive.com
www.latexlive.com
如果只使用文字,或者想自定义字体的话,可以使用Text(需要最新版manim)

>>> tex = Tex(
	
	)

只能传入一个字符串,支持\t \n等,还要传入想要使用的字体名称;
还可以传入一个t2c字典来实现自动上色;

>>> tex = TexMobject(
	"a bbcde\n\tfghi",
	color=BLACK,
	font="Consolas",
	t2c={"bcd":BLUE},
	).scale(2)

Text类是SVGMobject的子类,所以有其全部属性,和动画效果:

>>> tex = TexMobject(
	"a bbcde\n\tfghi",
	color=BLACK,
	font="Consolas",
	t2c={"bcd":BLUE},
	).scale(2)
>>> self.play(Write(text))
>>> debugTeX(self, text)

一个Text的子物体就是他的每个字符,空格\n也包括在内,\t算为4空格。
>>> debugTeX(self, text)
注:目前版本非显示字符在前一个显示字符的位置上,可能后续会改变~
有关Text的更多方法,可以查看这个官方中文文档:
官方中文文档

代码在这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值