目录
本文介绍 Manimgl 开发库中的 FunctionGraph 函数图形类和 ParametricCurve(曾用名:ParametricFunction,参数方程)参数曲线类进行图形绘制。这些图形分别对应于某个曲线的函数或参数方程。这些图像任然是 VMobject 对象,支持动画,也可以作为 MoveAlongPath 类的 path 参数,让其他 VMobject 沿着路径移动。Manimgl 的最新版中还增加了 ImplicitFunction 隐函数类,埋个坑,关于如何绘制隐函数图像下次单独介绍。
一、基本数学概念
先复习函数和参数方程的基本概念。
函数的定义:设A、B是非空的数集,如果按照某个确定的对应关系F,使对于集合A中的任意一个数 x,在集合B中都有唯一确定的数 F(x) 和它对应,那么就称 F:A→B 为从集合A到集合B的一个函数。记作:y=F(x),x∈A。其中,x 叫做自变量,x 的取值范围A叫做函数的定义域;与 x 的值相对应的 y 值叫做函数值,函数值的集合 { F(x) | x∈A } 叫做函数的值域。通过若干个这样的 x,F(x) 值对,Manimgl 就能在平面坐标系中绘制出函数所对应的图形。
参数方程是在取定的平面直角坐标系中,如果曲线上任意一点的坐标 x, y 都是某个变数 t 的函数,并且对于 t 的每个允许值,由图中方程组所确定的点 M(x, y) 都在这条曲线上,那么这个方程组就叫做这条曲线的参数方程。联系 x, y 之间的关系的变数叫做参变数,简称参数。参数方程中的参数可以是有物理或几何意义的变数,也可以是没有明显意义的变数。
相对于参数方程来说,直接给出曲线上点的坐标关系的方程 F(x, y)=0,叫做曲线的普通方程。一般情况下,可以通过消去参数方程中的参数,得到直接表示 x, y 之间关系的普通方程;也可以选择一个参数,将普通方程化成参数方程。同一个普通方程,如果选择的参数不同,可以化成不同的参数方程。概念部分就介绍这么多,具体问题可参考平面解析几何方面的资料。
二、绘制函数图形
通过 FunctionGraph 类,能快速绘制函数图形。该类是 ParametricCurve 的派生类,其主要变化是在构造函数中定义了一个参数方程函数 parametric_function,以 x_range 中的每个值作为参数 x,以该参数方程函数的返回值作为 y 值,将 z 值置0后,作为点坐标向量。事实上是初始化了一个特殊的 ParametricCurve 对象,FunctionGraph 的构造函数代码如下:
def __init__(self, function, x_range=None, **kwargs):
digest_config(self, kwargs)
self.function = function
if x_range is not None:
self.x_range[:len(x_range)] = x_range
def parametric_function(t):
return [t, function(t), 0]
super().__init__(parametric_function, self.x_range, **kwargs)