def get_graph_label( self, graph, label = "f(x)", x_val = None, direction = RIGHT, buff = MED_SMALL_BUFF, color = None, ): label = TexMobject(label) color = color or graph.get_color() label.set_color(color) if x_val is None: #Search from right to left for x in np.linspace(self.x_max, self.x_min, 100): point = self.input_to_graph_point(x, graph) if point[1] < FRAME_Y_RADIUS: break x_val = x label.next_to( self.input_to_graph_point(x_val, graph), direction, buff = buff ) label.shift_onto_screen() return label
def get_vector_label(self, vector, label, direction="left", rotate=False, color=None, label_scale_factor=VECTOR_LABEL_SCALE_FACTOR): if not isinstance(label, TexMobject): if len(label) == 1: label = "\\vec{\\textbf{%s}}" % label label = TexMobject(label) if color is None: color = vector.get_color() label.set_color(color) label.scale(label_scale_factor) label.add_background_rectangle() angle = vector.get_angle() if not rotate: label.rotate(-angle, about_point=ORIGIN) if direction is "left": label.shift(-label.get_bottom() + 0.1 * UP) else: label.shift(-label.get_top() + 0.1 * DOWN) label.rotate(angle, about_point=ORIGIN) label.shift((vector.get_end() - vector.get_start()) / 2) return label
def get_vector_label(self, vector, label, at_tip=False, direction="left", rotate=False, color=None, label_scale_factor=VECTOR_LABEL_SCALE_FACTOR): if not isinstance(label, TexMobject): if len(label) == 1: label = "\\vec{\\textbf{%s}}" % label label = TexMobject(label) if color is None: color = vector.get_color() label.set_color(color) label.scale(label_scale_factor) label.add_background_rectangle() if at_tip: vect = vector.get_vector() vect /= np.linalg.norm(vect) label.next_to(vector.get_end(), vect, buff=SMALL_BUFF) else: angle = vector.get_angle() if not rotate: label.rotate(-angle, about_point=ORIGIN) if direction is "left": label.shift(-label.get_bottom() + 0.1 * UP) else: label.shift(-label.get_top() + 0.1 * DOWN) label.rotate(angle, about_point=ORIGIN) label.shift((vector.get_end() - vector.get_start()) / 2) return label
def countdown(self): for k in range(5, -1, -1): countdown_text = TexMobject(str(k)) countdown_text.scale(1.5) countdown_text.set_color(YELLOW) countdown_text.to_corner(RIGHT+UP) self.add(countdown_text) self.wait() self.remove(countdown_text)
def get_number_mob(self, num): result = VGroup() place = 0 max_place = self.max_place while place < max_place: digit = TexMobject(str(self.get_place_num(num, place))) if place >= len(self.digit_place_colors): self.digit_place_colors += self.digit_place_colors digit.set_color(self.digit_place_colors[place]) digit.scale(self.num_scale_factor) digit.next_to(result, LEFT, buff=SMALL_BUFF, aligned_edge=DOWN) result.add(digit) place += 1 return result
def generate_symbol(self): symbol = TexMobject("\\checkmark") symbol.set_color(self.color) symbol.set_height(self.inner_radius) return symbol
def construct(self): colors = ["#FF0000", "#FF8000", "#FFFF00", "#00FF00", "#0080FF"] wallis_rects_4 = WallisRectangles( order=5, rect_colors=colors, ) vert_lines = VGroup(*[ Line(3.5*UP, 3.5*DOWN, color = GREY, stroke_width = 3) \ .next_to(wallis_rects_4.get_rectangle(0, k), direction, buff = 0) for k, direction in zip(list(range(5))+[4], [LEFT]*5+[RIGHT]) ]) horiz_lines = VGroup(*[ Line(3.5*LEFT, 3.5*RIGHT, color = GREY, stroke_width = 3) \ .next_to(wallis_rects_4.get_rectangle(k, 0), direction, buff = 0) for k, direction in zip(list(range(5))+[4], [DOWN]*5+[UP]) ]) for vert_line in vert_lines: vert_line.vertically_center() for horiz_line in horiz_lines: horiz_line.horizontally_center() vert_labels = VGroup(*[ TexMobject("a_%d" % k) \ .move_to((vert_lines[k].get_center() + vert_lines[k+1].get_center())/2) \ .shift(3.5*DOWN) for k in range(5) ]) horiz_labels = VGroup(*[ TexMobject("a_%d" % k) \ .move_to((horiz_lines[k].get_center() + horiz_lines[k+1].get_center())/2) \ .shift(3.5*LEFT) for k in range(5) ]) area_texs = VGroup() factors = [1.25, 1, 0.9, 0.7, 0.6] for p in range(5): for q in range(5 - p): rect = wallis_rects_4.get_rectangle(p, q) tex = TexMobject("{a_%d} {a_%d}" % (q, p)) tex.scale(factors[p + q]) tex.move_to(rect) area_texs.add(tex) figure = VGroup() figure.add(wallis_rects_4, vert_lines, horiz_lines, vert_labels, horiz_labels, area_texs) figure.to_edge(LEFT) self.add(figure) tex_list = VGroup() for p in range(5): formula_string = ( " + ".join(["a_%d a_%d" % (q, p - q) for q in range(p + 1)]) + "=1") formula = TexMobject(formula_string) tex_list.add(formula) # tex_list.add(TexMobject("\\vdots")) tex_factors = np.linspace(1, 0.7, 5) for tex, color, factor in zip(tex_list, colors, tex_factors): tex.set_color(color) tex.scale(factor) tex_list.arrange_submobjects(DOWN, aligned_edge=LEFT) tex_list.to_edge(RIGHT) self.add(tex_list) self.wait()