大家好!Manim 社區剛剛發佈了 v0.19.1 版本(發佈於 12 月 1 日)。雖然這是一個小版本號更新,但裏面可是藏着幾個非常實用的新功能!
無論你是剛入坑的新手,或者已經被某些痛點折磨過的老手,這篇更新速覽都值得一看。
1. 🌟 亮點一:終於可以“固定”隨機顏色了!
以前我們在使用 random_color() 時,最大的痛點就是:每次運行腳本,生成的顏色都不一樣!
有時候你覺得這次隨機出來的配色方案簡直完美,結果改了一行無關代碼再渲染,配色變了……心態直接崩了有沒有?
在 v0.19.1 中,random_color() 終於支持 seed(隨機種子)參數了!這意味着你可以通過指定種子,讓隨機顏色變得“確定”。
🌰 代碼示例
from manim import *
class DeterministicColors(Scene):
def construct(self):
# 以前:每次運行顏色都可能不同
# circle = Circle(color=random_color())
# 現在:指定 seed=1,無論運行多少次,它永遠是同一個顏色!
rnd = RandomColorGenerator(seed=1)
dot_a = Dot(radius=1, color=rnd.next())
dot_a.shift(LEFT * 2)
# 即使在不同的地方調用,只要種子一樣,顏色就一樣
dot_b = Dot(radius=1, color=rnd.next())
dot_b.shift(RIGHT * 2)
self.play(Create(dot_a), Create(dot_b))
self.wait()
只要seed的值一樣,每次的隨機的顏色都一樣。
這對於製作系列視頻或者調試配色時簡直是救命稻草。
2. 🌟 亮點二:ValueTracker 終於學會算術了
ValueTracker 是 Manim 中做動態數值動畫的核心。但以前它有點“笨”,不能直接參與加減乘除。
比如你想讓一個 tracker 的值翻倍,以前你得寫 t.set_value(t.get_value() * 2)。
現在則直接乘這就行了!
新版本支持 +, -, *, /, //, %, ** 等常見運算符。
🌰 代碼示例
from manim import *
class SmartTracker(Scene):
def construct(self):
tracker = ValueTracker(2)
number = DecimalNumber()
number.add_updater(lambda m: m.set_value(tracker.get_value()))
self.add(number)
# 以前的寫法(現在依然可用,但比較繁瑣)
# self.play(tracker.animate.set_value(tracker.get_value() + 5))
# v0.19.1 的新玩法:直接對對象進行操作
# 注意:這裏展示的是邏輯上的簡化,在非 animate 場景下處理數據更方便
# 比如我們在循環中處理數據邏輯時:
tracker += 5 # tracker 的內部值現在變成了 7
self.wait()
# 甚至可以進行更復雜的運算
tracker *= 2 # 變成 14
self.wait()
# 注意:如果你要用 animate 動畫過渡,還是推薦用 .animate.set_value()
# 但這個特性讓編寫複雜的 updater 邏輯或者預計算變得非常爽。
代碼又可以少寫幾行 get_value() 了,清爽度 +1。
3. 🌟 亮點三:新增 TangentialArc (切線弧)
這是幾何繪圖的新玩具!以前如果想畫一段圓弧,既要連接兩個點,又要保證切線方向平滑,可能需要費點腦筋去算角度。
新的 TangentialArc 旨在簡化這類幾何構造。
目前官方文檔還在完善中,但它的出現意味着我們可以更容易地畫出流暢連接直線或曲線的圓弧了。
🌰 代碼場景
如果你有一條直線,想在末端接一個圓弧,且連接處要是“絲滑”的(切線連續)。
以前你得算切角,現在可以試試使用 TangentialArc 。
class TangentialArcSample(Scene):
def construct(self):
l1 = Line([0, 3, 0], [1, 2, 0], color=RED)
l2 = Line([-2, 3, 0], [1, 2, 0], color=BLUE)
# 創建切圓弧對象
# 參數説明:
# - l1: 第一條切線
# - l2: 第二條切線
# - radius: 圓弧的半徑(0.2)
# - corner: 圓弧所在的角落方向
# - color: 圓弧的顏色(綠色)
circulararc = TangentialArc(l1, l2, radius=0.2, corner=(-1, -1), color=GREEN)
self.play(Create(l1), Create(l2))
self.play(Create(circulararc))
self.wait()
4. 🛠️ 其他值得關注的變化
除了上面三個新特性,還有一些改動也非常貼心:
- SurroundingRectangle 更靈活了:
以前buff參數只能是一個數字,導致矩形框的四周留白必須一樣。現在你可以傳入一個元組buff=(0.5, 0.1),分別控制 水平 和 垂直 方向的間距。給長公式加框時再也不用擔心左右太寬或者上下太擠了! - Code Mobject 支持 OpenGL:
如果你是用 OpenGL 渲染模式(渲染速度超快的那種)的用户,現在Code對象也能完美顯示了。 - 修復了 Tex 環境格式化問題:
寫LaTeX公式時如果不小心換行或者格式亂了,現在Manim能更好地處理它,報錯更少。 - CLI 默認分辨率調整:
命令行工具的默認分辨率邏輯進行了一些微調,更加符合 1080p 的標準預期。
5. 📝 總結與升級
這次 v0.19.1 雖然版本號跨度不大,但每一個改動都切中了實際開發中的痛點。
特別是 隨機種子 和 ValueTracker 算術支持,屬於那種“用了就回不去”的優化。
升級Manim也很簡單,打開終端/命令行,輸入:
pip install --upgrade manim
快去試試新功能吧!如果你用新特性做出了好玩的動畫,歡迎在社區分享哦。