from __future__ import absolute_import from constants import * from mobject.types.vectorized_mobject import VMobject from utils.config_ops import digest_config class ParametricFunction(VMobject): CONFIG = { "t_min" : 0, "t_max" : 1, "num_anchor_points" : 100, } def __init__(self, function, **kwargs): self.function = function VMobject.__init__(self, **kwargs) def generate_points(self): n_points = 3*self.num_anchor_points - 2 self.points = np.zeros((n_points, self.dim)) self.points[:,0] = np.linspace( self.t_min, self.t_max, n_points ) #VMobject.apply_function takes care of preserving #desirable tangent line properties at anchor points self.apply_function(lambda p : self.function(p[0])) class FunctionGraph(ParametricFunction): CONFIG = { "color" : YELLOW, "x_min" : -FRAME_X_RADIUS, "x_max" : FRAME_X_RADIUS, } def __init__(self, function, **kwargs): digest_config(self, kwargs) parametric_function = lambda t : t*RIGHT + function(t)*UP ParametricFunction.__init__( self, parametric_function, t_min = self.x_min, t_max = self.x_max, **kwargs ) self.function = function def get_function(self): return self.function