概要
前端時間做尺規作圖相關的影片的時候,封裝了一個圓規的影片,順便研究了下 manim 庫的影片函式,
manim 本身就是做影片的庫,所以,基于它封裝自定義的影片非常方便,
影片原理
對于單個的元素,manim本身就提供了非常多的影片函式,
比如:創建/消除的影片,移動元素的影片,旋轉元素的影片等等,具體可以參考: Animations
如果是做一些簡單的演示視頻的話,這些內置的影片函式滿足要求綽綽有余,
但是,對于多個元素聯動的影片,則需要撰寫各個元素之間的聯動規則,來封裝符合要求的影片,
下面以圓規影片為例,演示多元素影片如何封裝,
圓規影片目的還是畫出一個 圓弧,只是在繪制的圓弧的程序中展示了圓弧的起點,終點以及連接起點終點之間的線,
這樣,實際使用圓規作圖的時候,可以更好的理解 圓弧是如何畫出來的,
函式的簽名如下:
def ruler(sc: Scene, p1, p2, angle=PI, axis=OUT):
"""
圓規影片
Parameters
---------
sc
繪制影片的場景
p1
代表圓規的針,繪制時不動的點
p2
代表圓規的筆芯,繪制圓弧的點
angle
繪制圓弧的角度,默認PI,相當于繪制半個圓
axis
只有2個值 IN/OUT,分別表示順時針還是逆時針作弧
"""
# 省略,,,
return arc
各個引數的含義參見注釋,
實作影片的思路如下:
- 構建3個元素,也就是
d1(根據引數中p1坐標繪制的點),d2(根據引數中p2坐標繪制的點)以及dl(連接p1和p2的虛線) - 設定
dl的影片,隨著d1和d2變化不斷重新繪制(這里d1其實是不會變的) - 再設定圓弧的影片,隨著
d2的變動,不斷繪制新的圓弧 - 通過
manim自帶的影片函式讓d2先動,其他影片則會隨之一起 - 最后洗掉不必要的元素,只保留圓弧在 場景(
sc)中
def ruler(sc: Scene, p1, p2, angle=PI, axis=OUT):
"""
圓規影片
Parameters
---------
sc
繪制影片的場景
p1
代表圓規的針,繪制時不動的點
p2
代表圓規的筆芯,繪制圓弧的點
angle
繪制圓弧的角度,默認PI,相當于繪制半個圓
axis
只有2個值 IN/OUT,分別表示順時針還是逆時針作弧
"""
d1 = Dot(point=p1, color=RED)
d2 = Dot(point=p2, color=GREEN)
dl = DashedLine(d1.get_center(), d2.get_center())
r = np.linalg.norm(p2 - p1)
arc = ArcBetweenPoints(p2, p2)
dl.add_updater(lambda z: z.become(DashedLine(d1.get_center(), d2.get_center())))
if np.array_equal(axis, OUT):
arc.add_updater(
lambda z: z.become(
ArcBetweenPoints(p2, d2.get_center(), radius=r, stroke_color=GREEN)
)
)
if np.array_equal(axis, IN):
arc.add_updater(
lambda z: z.become(
ArcBetweenPoints(d2.get_center(), p2, radius=r, stroke_color=GREEN)
)
)
sc.add(d1, d2, dl, arc)
sc.play(
Rotate(
d2,
about_point=d1.get_center(),
axis=axis,
angle=angle,
rate_func=linear,
)
)
arc.clear_updaters()
dl.clear_updaters()
sc.remove(d1, d2, dl)
return arc
影片效果
封裝之后,使用起來非常簡單:
# -*- coding: utf-8 -*-
from manim import *
import numpy as np
class Sample(Scene):
def construct(self):
ruler(self, np.array([-1, 0, 0]), np.array([-1, 1, 0]))
ruler(self, np.array([1, 0, 0]), np.array([1, 1, 0]), axis=IN)
self.wait()
上面演示了逆時針(默認是逆時針)和順時針方式繪制半圓,

各個元素的顏色等相關屬性,沒有暴露到函式引數中,可以直接在代碼中修改,
這里主要演示如何基于 manim制作多元素影片的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542691.html
標籤:其他
上一篇:記一次線上FGC問題排查
