def get_circles_and_points(self, min_input, max_input): input_left, input_right = [ self.interval.number_to_point(num) for num in min_input, max_input ] input_circle = Circle( radius = np.linalg.norm(input_left-input_right)/2, color = WHITE ) input_circle.shift((input_left+input_right)/2) input_points = Line( input_left, input_right, color = self.input_color ) output_points = Mobject(color = self.output_color) n = self.output.get_num_points() output_points.add_points( self.output.points[int(min_input*n):int(max_input*n)] ) output_center = output_points.points[int(0.5*output_points.get_num_points())] max_distance = np.linalg.norm(output_center-output_points.points[-1]) output_circle = Circle( radius = max_distance, color = WHITE ) output_circle.shift(output_center) return ( input_circle, input_points, output_circle, output_points )
class ThoughtBubble(Bubble): DEFAULT_CONFIG = { "num_bulges": 7, "initial_inner_radius": 1.8, "initial_width": 6, } def __init__(self, **kwargs): Bubble.__init__(self, **kwargs) def get_tip(self): return self.small_circle.get_bottom() def generate_points(self): self.small_circle = Circle().scale(0.15) self.small_circle.shift(2.5 * DOWN + 2 * LEFT) self.add(self.small_circle) self.add(Circle().scale(0.3).shift(2 * DOWN + 1.5 * LEFT)) for n in range(self.num_bulges): theta = 2 * np.pi * n / self.num_bulges self.add(Circle().shift((np.cos(theta), np.sin(theta), 0))) self.filter_out( lambda p: np.linalg.norm(p) < self.initial_inner_radius) self.stretch_to_fit_width(self.initial_width) self.highlight("white")
def get_circles_and_points(self, min_input, max_input): input_left, input_right = [ self.interval.number_to_point(num) for num in min_input, max_input ] input_circle = Circle( radius = np.linalg.norm(input_left-input_right)/2, color = WHITE ) input_circle.shift((input_left+input_right)/2) input_points = Line( input_left, input_right, color = self.input_color ) output_points = Mobject(color = self.output_color) n = self.output.get_num_points() output_points.add_points( self.output.points[int(min_input*n):int(max_input*n)] ) output_center = output_points.points[int(0.5*output_points.get_num_points())] max_distance = np.linalg.norm(output_center-output_points.points[-1]) output_circle = Circle( radius = max_distance, color = WHITE ) output_circle.shift(output_center) return ( input_circle, input_points, output_circle, output_points )
class ThoughtBubble(Bubble): DEFAULT_CONFIG = { "num_bulges" : 7, "initial_inner_radius" : 1.8, "initial_width" : 6, } def __init__(self, **kwargs): Bubble.__init__(self, **kwargs) def get_tip(self): return self.small_circle.get_bottom() def generate_points(self): self.small_circle = Circle().scale(0.15) self.small_circle.shift(2.5*DOWN+2*LEFT) self.add(self.small_circle) self.add(Circle().scale(0.3).shift(2*DOWN+1.5*LEFT)) for n in range(self.num_bulges): theta = 2*np.pi*n/self.num_bulges self.add(Circle().shift((np.cos(theta), np.sin(theta), 0))) self.filter_out(lambda p : np.linalg.norm(p) < self.initial_inner_radius) self.stretch_to_fit_width(self.initial_width) self.highlight("white")