def scroll_through_patrons(self): logo_box = Square(side_length=2.5) logo_box.to_corner(DOWN + LEFT, buff=MED_LARGE_BUFF) total_width = SPACE_WIDTH - logo_box.get_right()[0] black_rect = Rectangle(fill_color=BLACK, fill_opacity=1, stroke_width=0, width=2 * SPACE_WIDTH, height=1.1 * SPACE_HEIGHT) black_rect.to_edge(UP, buff=0) line = DashedLine(SPACE_WIDTH * LEFT, SPACE_WIDTH * RIGHT) line.move_to(black_rect, DOWN) line.shift(SMALL_BUFF * SMALL_BUFF * DOWN) self.add(line) patrons = VGroup(*map(TextMobject, self.specific_patrons)) patrons.scale(self.patron_scale_val) for patron in patrons: if patron.get_width() > self.max_patron_width: patron.scale_to_fit_width(self.max_patron_width) columns = VGroup(*[ VGroup(*patrons[i::self.n_patron_columns]).arrange_submobjects( DOWN, buff=MED_SMALL_BUFF) for i in range(self.n_patron_columns) ]) columns.arrange_submobjects( RIGHT, buff=LARGE_BUFF, aligned_edge=UP, ) columns.scale_to_fit_width(total_width - 1) columns.next_to(black_rect, DOWN, 3 * LARGE_BUFF) columns.to_edge(RIGHT) self.play( columns.next_to, SPACE_HEIGHT * DOWN, UP, LARGE_BUFF, columns.to_edge, RIGHT, Animation(black_rect), rate_func=None, run_time=self.run_time, )
def get_secant_slope_group( self, 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, ): """ Resulting group is of the form VGroup( dx_line, df_line, dx_label, (if applicable) df_label, (if applicable) secant_line, (if applicable) ) with attributes of those names. """ kwargs = locals() kwargs.pop("self") group = VGroup() group.kwargs = kwargs dx = dx or float(self.x_max - self.x_min)/10 dx_line_color = dx_line_color or self.default_input_color df_line_color = df_line_color or graph.get_color() p1 = self.input_to_graph_point(x, graph) p2 = self.input_to_graph_point(x+dx, graph) interim_point = p2[0]*RIGHT + p1[1]*UP group.dx_line = Line( p1, interim_point, color = dx_line_color ) group.df_line = Line( interim_point, p2, color = df_line_color ) group.add(group.dx_line, group.df_line) labels = VGroup() if dx_label is not None: group.dx_label = TexMobject(dx_label) labels.add(group.dx_label) group.add(group.dx_label) if df_label is not None: group.df_label = TexMobject(df_label) labels.add(group.df_label) group.add(group.df_label) if len(labels) > 0: max_width = 0.8*group.dx_line.get_width() max_height = 0.8*group.df_line.get_height() if labels.get_width() > max_width: labels.scale_to_fit_width(max_width) if labels.get_height() > max_height: labels.scale_to_fit_height(max_height) if dx_label is not None: group.dx_label.next_to( group.dx_line, np.sign(dx)*DOWN, buff = group.dx_label.get_height()/2 ) group.dx_label.highlight(group.dx_line.get_color()) if df_label is not None: group.df_label.next_to( group.df_line, np.sign(dx)*RIGHT, buff = group.df_label.get_height()/2 ) group.df_label.highlight(group.df_line.get_color()) if include_secant_line: secant_line_color = secant_line_color or self.default_derivative_color group.secant_line = Line(p1, p2, color = secant_line_color) group.secant_line.scale_in_place( secant_line_length/group.secant_line.get_length() ) group.add(group.secant_line) return group
def get_secant_slope_group( self, 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, ): """ Resulting group is of the form VGroup( dx_line, df_line, dx_label, (if applicable) df_label, (if applicable) secant_line, (if applicable) ) with attributes of those names. """ kwargs = locals() kwargs.pop("self") group = VGroup() group.kwargs = kwargs dx = dx or float(self.x_max - self.x_min)/10 dx_line_color = dx_line_color or self.default_input_color df_line_color = df_line_color or graph.get_color() p1 = self.input_to_graph_point(x, graph) p2 = self.input_to_graph_point(x+dx, graph) interim_point = p2[0]*RIGHT + p1[1]*UP group.dx_line = Line( p1, interim_point, color = dx_line_color ) group.df_line = Line( interim_point, p2, color = df_line_color ) group.add(group.dx_line, group.df_line) labels = VGroup() if dx_label is not None: group.dx_label = TexMobject(dx_label) labels.add(group.dx_label) group.add(group.dx_label) if df_label is not None: group.df_label = TexMobject(df_label) labels.add(group.df_label) group.add(group.df_label) if len(labels) > 0: max_width = 0.8*group.dx_line.get_width() max_height = 0.8*group.df_line.get_height() if labels.get_width() > max_width: labels.scale_to_fit_width(max_width) if labels.get_height() > max_height: labels.scale_to_fit_height(max_height) if dx_label is not None: group.dx_label.next_to( group.dx_line, np.sign(dx)*DOWN, buff = group.dx_label.get_height()/2 ) group.dx_label.highlight(group.dx_line.get_color()) if df_label is not None: group.df_label.next_to( group.df_line, np.sign(dx)*RIGHT, buff = group.df_label.get_height()/2 ) group.df_label.highlight(group.df_line.get_color()) if include_secant_line: secant_line_color = secant_line_color or self.default_derivative_color group.secant_line = Line(p1, p2, color = secant_line_color) group.secant_line.scale_in_place( secant_line_length/group.secant_line.get_length() ) group.add(group.secant_line) return group