數學函式影象場景類,實現函式求導、黎曼積分的動態展示

在數學的動畫中,函式以及影象是不可避免的元素,為實現數學函式及影象的展示,manim提供了一個函式場景類GraphScene。下文將給出函式場景類的使用說明。

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

GraphScene

繪製函式的影象類GraphScene,其基類為上面的場景類Scene

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

GraphScene使用之前,可以按照需求,參考上述引數,對座標系進行設定。然後在construct()方法中新增函式影象,例如:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

GraphScene渲染的函式影象如下圖:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

下面介紹GraphScene的方法,將繼續使用上述函式及程式碼。

GraphScene方法使用

透過繼承GraphScene,定義新的GraphScene類,用get_graph()方法描述函式圖形。

setup_axes(

animate=False

):該方法設定graph的軸線;

get_graph(

func

color=None

x_min=None

x_max=None

**kwargs

):獲得一個繪製的曲線,返回型別為ParametricFunction;

func為function型別,用於繪圖,其返回值為給定x座標的y座標;

color為可選的RGB顏色字串,用於指定曲線顏色;

x_min為可選的int或float型引數,曲線繪製的下限值;

x_max為可選的int或float型引數,曲線繪製的上限值;

add_T_label(

x_val

side=array([1.0, 0.0, 0.0])

label=None

color='#FFFFFF'

animated=False

**kwargs

):該方法將向場景中新增三個物件:一個在x軸上的三角形標記;一條x座標軸與影象之間的、垂直直線,垂足為指定的x座標;以及一個MathTex標籤。使用該方法之前,需要指定self。v_graph。

x_val為float或int型,割線進入的x座標,首次與函式圖相交;

side,可選的np。array();

label,可選的字串,直線和三角形標記的標籤;

color,可選的字串型別,label的hex顏色;

animated,可選的布林型別,是否動畫展示T_label的新增;

加標籤

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

標籤渲染效果如圖:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

angle_of_tangent(

x

graph

dx=0.01

):返回函式曲線在給定x座標處的切線與x軸的夾角;

引數x為int或float,是曲線的一個切點;

graph,型別為ParametricFunction,用於計算切線;

dx是int或float型的可選引數,用於x的變化,導致的y變化,求得切線值;

get_secant_slope_group(

x

graph

dx=None

dx_line_color=None

df_line_color=None

dx_label=None

df_label=None

include_secant_line=True

secant_line_color=None

secant_line_length=10

):返回一個VGroup,包含兩條代表dx和df的線,dx和df的標籤,指定x值處的切線;

int或float型的x,割線的x輸入值;

graph型別為ParametricFunction;

dx為可選的int或float型引數,割線退出後x的變化;

dx_line_color為可選的顏色字串,標示x變化的線的顏色;

df_line_color為可選的顏色字串,標示y變化的線的顏色;

dx_label為可選的字串,為變化的x提供標籤;

df_label為可選的字串,為變化的y提供標籤;

include_secant_line為可選的bool型別,是否包含函式影象中的割線,或只是dx和df線和標籤;

secant_line_color為可選的字串,指定割線的顏色;

secant_line_length為可選的int或float型引數,指定割線的長度;

獲取函式曲線在某點的切線:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

切線渲染效果:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

animate_secant_slope_group_change(

secant_slope_group

target_dx=None

target_x=None

run_time=3

added_anims=None

**anim_kwargs

):動畫展示割線坡度組的變化,從老的割線坡度組變為新的割線坡度組;注意,target_dx和target_x要至少有一個為非空。

secant_slope_group為VGroup型別,老的割線坡度組;

target_dx為int或float型的可選引數,新的dx值;

target_x為int或float型的可選引數,指定割線的位置;

run_time為int或float型的可選引數,動畫的執行時間;

added_anims為可選的列表,任何可同時播放的動畫;

呈現兩點之間的切線動態變化:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

切線的變化效果如圖:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

coords_to_point(

x

y

):因為graph要比場景小的多,所以場景的座標不能對映到graph的座標;該方法返回graph的一個比例化座標,給出對應場景的笛卡爾座標;

引數x和y均為int或float型;

一個座標轉化的例子,geometry物件的座標轉化為GraphScene的座標:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

座標轉化後,渲染效果:

數學函式影象場景類,實現函式求導、黎曼積分的動態展示

購買manim專欄,快速入門數學動畫的製作。