def add_title(self, title="Sample space", buff=MED_SMALL_BUFF): # TODO, should this really exist in SampleSpaceScene title_mob = Tex(title) if title_mob.width > self.width: title_mob.width = self.width title_mob.next_to(self, UP, buff=buff) self.title = title_mob self.add(title_mob)
def __init__(self, dark_theme: bool = True): super().__init__() logo_green = "#81b29a" logo_blue = "#454866" logo_red = "#e07a5f" m_height_over_anim_height = 0.75748 self.font_color = "#ece6e2" if dark_theme else "#343434" self.scale_factor = 1 self.M = MathTex(r"\mathbb{M}").scale(7).set_color(self.font_color) self.M.shift(2.25 * LEFT + 1.5 * UP) self.circle = Circle(color=logo_green, fill_opacity=1).shift(LEFT) self.square = Square(color=logo_blue, fill_opacity=1).shift(UP) self.triangle = Triangle(color=logo_red, fill_opacity=1).shift(RIGHT) self.shapes = VGroup(self.triangle, self.square, self.circle) self.add(self.shapes, self.M) self.move_to(ORIGIN) anim = VGroup() for i, ch in enumerate("anim"): tex = Tex( "\\textbf{" + ch + "}", tex_template=TexFontTemplates.gnu_freeserif_freesans, ) if i != 0: tex.next_to(anim, buff=0.01) tex.align_to(self.M, DOWN) anim.add(tex) anim.set_color(self.font_color) anim.height = m_height_over_anim_height * self.M.height # Note: "anim" is only shown in the expanded state # and thus not yet added to the submobjects of self. self.anim = anim
def add_labels( self, dict_values: dict[float, str | float | VMobject], direction: Sequence[float] = None, buff: float | None = None, font_size: float | None = None, label_constructor: VMobject | None = None, ): """Adds specifically positioned labels to the :class:`~.NumberLine` using a ``dict``. The labels can be accessed after creation via ``self.labels``. Parameters ---------- dict_values A dictionary consisting of the position along the number line and the mobject to be added: ``{1: Tex("Monday"), 3: Tex("Tuesday")}``. :attr:`label_constructor` will be used to construct the labels if the value is not a mobject (``str`` or ``float``). direction Determines the direction at which the label is positioned next to the line. buff The distance of the label from the line. font_size The font size of the mobject to be positioned. label_constructor The :class:`~.VMobject` class that will be used to construct the label. Defaults to the ``label_constructor`` attribute of the number line if not specified. Raises ------ AttributeError If the label does not have a ``font_size`` attribute, an ``AttributeError`` is raised. """ direction = self.label_direction if direction is None else direction buff = self.line_to_number_buff if buff is None else buff font_size = self.font_size if font_size is None else font_size label_constructor = (self.label_constructor if label_constructor is None else label_constructor) labels = VGroup() for x, label in dict_values.items(): # TODO: remove this check and ability to call # this method via CoordinateSystem.add_coordinates() # must be explicitly called if isinstance(label, str) and self.label_constructor is MathTex: label = Tex(label) else: label = self._create_label_tex(label) if hasattr(label, "font_size"): label.font_size = font_size else: raise AttributeError( f"{label} is not compatible with add_labels.") label.next_to(self.number_to_point(x), direction=direction, buff=buff) labels.add(label) self.labels = labels self.add(labels) return self
def get_det_text( matrix, determinant=None, background_rect=False, initial_scale_factor=2, ): r"""Helper function to create determinant. Parameters ---------- matrix : :class:`~.Matrix` The matrix whose determinant is to be created determinant : :class:`int|str` The value of the determinant of the matrix background_rect : :class:`bool` The background rectangle initial_scale_factor : :class:`float` The scale of the text `det` w.r.t the matrix Returns -------- :class:`~.VGroup` A VGroup containing the determinant Examples -------- .. manim:: DeterminantOfAMatrix :save_last_frame: class DeterminantOfAMatrix(Scene): def construct(self): matrix = Matrix([ [2, 0], [-1, 1] ]) # scaling down the `det` string det = get_det_text(matrix, determinant=3, initial_scale_factor=1) # must add the matrix self.add(matrix) self.add(det) """ parens = MathTex("(", ")") parens.scale(initial_scale_factor) parens.stretch_to_fit_height(matrix.height) l_paren, r_paren = parens.split() l_paren.next_to(matrix, LEFT, buff=0.1) r_paren.next_to(matrix, RIGHT, buff=0.1) det = Tex("det") det.scale(initial_scale_factor) det.next_to(l_paren, LEFT, buff=0.1) if background_rect: det.add_background_rectangle() det_text = VGroup(det, l_paren, r_paren) if determinant is not None: eq = MathTex("=") eq.next_to(r_paren, RIGHT, buff=0.1) result = MathTex(str(determinant)) result.next_to(eq, RIGHT, buff=0.2) det_text.add(eq, result) return det_text
def get_text(self, *text, **kwargs): text_mob = Tex(*text) self.put_at_tip(text_mob, **kwargs) return text_mob