上一篇介紹的SingleStringMathTex主要用來顯示只有一行的數(shù)學(xué)公式,對(duì)于復(fù)雜的數(shù)學(xué)公式,可以使用MathTex類。 MathTex類繼承自SingleStringMathTex,在其基礎(chǔ)之上增加了更多的功能。其實(shí),MathTex是制作數(shù)學(xué)動(dòng)畫時(shí)常用的類,反而SingleStringMa
上一篇介紹的
SingleStringMathTex
主要用來顯示只有一行的數(shù)學(xué)公式,
對(duì)于復(fù)雜的數(shù)學(xué)公式,可以使用
MathTex
類。
MathTex
類繼承自
SingleStringMathTex
,在其基礎(chǔ)之上增加了更多的功能。
其實(shí),
MathTex
是制作數(shù)學(xué)動(dòng)畫時(shí)常用的類,反而
SingleStringMathTex
用的不多。
MathTex
在
manim
各個(gè)模塊中的位置大致如上圖中所示。
MathTex
的主要參數(shù)有:
參數(shù)名稱 | 類型 | 說明 |
---|---|---|
tex_strings | list | 多個(gè)latex格式的公式 |
arg_separator | string | 多個(gè)公式之間的間隔 |
substrings_to_isolate | list | 將公式中分離成一個(gè)個(gè)小部分 |
tex_to_color_map | dict | 公式中不同部分的顏色設(shè)置 |
tex_environment | str | 不熟悉latex的話不要設(shè)置 |
MathTex
繼承了
SingleStringMathTex
之后,擴(kuò)展了不少新的方法,可以更好的控制和展示數(shù)學(xué)公式。
名稱 | 說明 |
---|---|
get_part_by_tex | 獲取 latex公式 中的一部分 |
get_parts_by_tex | 獲取 latex公式 中的多個(gè)部分 |
index_of_part | 公式的某部分在整個(gè)公式中的索引 |
index_of_part_by_tex | 某個(gè)tex string在整個(gè)公式中的索引 |
set_color_by_tex | 根據(jù)某個(gè) tex string 設(shè)置顏色 |
set_color_by_tex_to_color_map | 用字典的形式設(shè)置多個(gè) tex string 的顏色 |
set_opacity_by_tex | 根據(jù)某個(gè) tex string 設(shè)置透明度 |
sort_alphabetically | 按字母順序排列 latex公式 中的各個(gè)部分 |
MathTex
的大部分方法都要配合
substrings_to_isolate
參數(shù)來一起使用,
通過
substrings_to_isolate
將完整的數(shù)學(xué)公式劃分成一個(gè)個(gè)小部分,然后設(shè)置不同的樣式。
下面的使用示例,大部分是結(jié)合 參數(shù) 和 方法 一起使用的。
MathTex
支持輸入多個(gè)公式,多個(gè)公式之間默認(rèn)是空格分隔,可以通過
arg_separator
參數(shù)設(shè)置不同的分隔。
tex = MathTex("z", "=",
"\sqrt{x^2+y^2}")
tex = MathTex("z", "=",
"\sqrt{x^2+y^2}",
arg_separator="\quad")
\quad
表示設(shè)置4個(gè)空格。
拆分公式非常有用,拆分之后,可以對(duì)公式的一部分進(jìn)行操作.
比如設(shè)置顏色,透明度,甚至可以在公式的不同部分應(yīng)用不同的動(dòng)畫,做出更酷炫的展現(xiàn)形式。
默認(rèn)情況下,公式是一個(gè)整體,哪怕用公式中的一個(gè)字符去獲取,也會(huì)得到整個(gè)公式。
tex = MathTex("z=\sqrt{x^2+y^2}")
print(f"{len(tex) =}")
## 輸出結(jié)果:
# len(tex) =1
part = tex.get_part_by_tex("x")
print(f"{part = }")
## 輸出結(jié)果:
# part = SingleStringMathTex('z=\\sqrt{x^2+y^2}')
所以,先使用
substrings_to_isolate
參數(shù)拆分公式,
然后就可以使用
get_part_by_tex
,
get_parts_by_tex
這些函數(shù)來獲取公式的不同部分。
tex = MathTex("y=ax^2+bx+c",
substrings_to_isolate=["x", "y"])
print(f"{len(tex) =}")
## 輸出結(jié)果:
# len(tex) =6
part = tex.get_part_by_tex("y")
print(f"{part = }")
## 輸出結(jié)果:
# part = SingleStringMathTex('y')
parts = tex.get_parts_by_tex("x")
print(f"{parts = }")
## 輸出結(jié)果:
# parts = VGroup(SingleStringMathTex('x'),
# SingleStringMathTex('x'))
從上面的示例中看出,對(duì)于公式
\(y=ax^2+bx+c\)
,按
\(x,y\)
分割之后,
整個(gè)公式被分成了6份,所以
len(tex)=6
,分成了:
也就是說,
substrings_to_isolate
中指定的
\(x,y\)
作為了整個(gè)公式的分割點(diǎn)。
tex.get_part_by_tex("y")
得到的是包含
\(y\)
的那部分公式,因?yàn)?
\(y\)
在
substrings_to_isolate
中,
所以上面示例中返回的是
part = SingleStringMathTex('y')
。
如果是
tex.get_part_by_tex("a")
的話,返回的將是
part = SingleStringMathTex('=a')
。
上面分成的6個(gè)部分中,有兩個(gè)部分包含
\(x\)
,
所以
parts = tex.get_parts_by_tex("x")
返回的
VGroup
包含兩個(gè)元素。
通過
index_of_part
,
index_of_part_by_tex
可以根據(jù)索引來獲取公式被分割的各個(gè)部分。
tex = MathTex("y=ax^2+bx+c",
substrings_to_isolate=["x", "y"])
part = tex.get_part_by_tex("b")
print(tex.index_of_part(part))
## 輸出結(jié)果
# 3
print(tex.index_of_part_by_tex("b"))
## 輸出結(jié)果
# 3
在分成的6個(gè)部分中,
\(b\)
所在的部分是
第4個(gè)
,
index
是從
0
開始的,所以示例中輸出結(jié)果為
3
。
之所以要拆分公式,就是為了對(duì)不同的部分進(jìn)行不同的操作,下面的示例樣式拆分之后帶來的應(yīng)用。
使用拆分前,雖然也可以通過
color
屬性給公式著色,但是只能給整個(gè)公式設(shè)置一個(gè)顏色:
tex = MathTex(
"z=\sqrt{x^2+y^2}",
color=RED,
)
拆分之后,可以通過
set_color_by_tex
給不同的部分設(shè)置不同的顏色:
tex = MathTex("z", "=", "\sqrt{x^2+y^2}",
substrings_to_isolate=["x", "y", "z"])
tex.set_color_by_tex("x", RED)
tex.set_color_by_tex("y", GREEN)
tex.set_color_by_tex("z", BLUE)
同時(shí)設(shè)置多個(gè)顏色,也可以用
set_color_by_tex_to_color_map
方法:
tex.set_color_by_tex_to_color_map({
"x": BLUE, "y": RED, "z": GREEN
})
上面三種方式著色后的效果如下:
除了顏色,拆分之后,也可以給不同的部分設(shè)置透明度。
tex = MathTex(
"z",
"=",
"\sqrt{x^2+y^2}",
substrings_to_isolate=["x", "y", "z"],
)
tex.set_opacity_by_tex("x", 0.4)
tex.set_opacity_by_tex("y", 0.4)
tex.set_opacity_by_tex("z", 0.6)
tex.set_color_by_tex_to_color_map({
"x": BLUE, "y": RED, "z": GREEN
})
給
\(x,y,z\)
方別設(shè)置的不同的透明度和顏色,和未設(shè)置透明度時(shí)的對(duì)比如下:
最后這個(gè)是排序功能,是將數(shù)學(xué)公式的各個(gè)部分按照
ASCII
碼的順序排序。
比如,排序前(正常的公式從左到右的順序排列各個(gè)部分):
tex = MathTex("c>a>b",
substrings_to_isolate=["a", "b", "c"])
for i in range(len(tex)):
print(tex[i])
## 輸出結(jié)果:
# SingleStringMathTex('c')
# SingleStringMathTex('>')
# SingleStringMathTex('a')
# SingleStringMathTex('>')
# SingleStringMathTex('b')
排序后:
tex.sort_alphabetically()
for i in range(len(tex)):
print(tex[i])
## 輸出結(jié)果:
# SingleStringMathTex('>')
# SingleStringMathTex('>')
# SingleStringMathTex('a')
# SingleStringMathTex('b')
# SingleStringMathTex('c')
按照
ASCII
碼的順序重新排列了各個(gè)部分。
這樣排列有什么用呢?通過動(dòng)畫來顯示公式時(shí),渲染的順序不一樣。
排序前,從左到右一次顯示
c, >, a, >, b
;
排序后,顯示順序?yàn)樽優(yōu)?
>, >, a, b, c
。
文中完整的代碼放在網(wǎng)盤中了(
math_tex.py
),
下載地址:
完整代碼
(訪問密碼: 6872)
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)