def __init__( self, label: str | SingleStringMathTex | Text | Tex, radius: float | None = None, **kwargs, ) -> None: if isinstance(label, str): from manim import MathTex rendered_label = MathTex(label, color=BLACK) else: rendered_label = label if radius is None: radius = 0.1 + max(rendered_label.width, rendered_label.height) / 2 super().__init__(radius=radius, **kwargs) rendered_label.move_to(self.get_center()) self.add(rendered_label)
def __init__(self, label, radius=None, **kwargs) -> None: if isinstance(label, str): from manim import MathTex rendered_label = MathTex(label, color=BLACK) else: rendered_label = label if radius is None: radius = (0.1 + max(rendered_label.get_width(), rendered_label.get_height()) / 2) Dot.__init__(self, radius=radius, **kwargs) rendered_label.move_to(self.get_center()) self.add(rendered_label)
def __init__(self, label, width=None, height=None, width_buff=0.1, height_buff=0.1, color=WHITE, fill_color=WHITE, fill_opacity=1.0, corner_radius=0.1, tip_direction=None, tip_height=0.3, tip_width=0.3, **kwargs) -> None: if isinstance(label, str): from manim import MathTex rendered_label = MathTex(label, color=BLACK) else: rendered_label = label if width is None: width = (2 * width_buff + rendered_label.get_width()) if height is None: height = (2 * height_buff + rendered_label.get_height()) RoundedRectangle.__init__(self, width=width, height=height, color=color, fill_color=fill_color, fill_opacity=fill_opacity, corner_radius=corner_radius, **kwargs) rendered_label.move_to(self.get_center()) self.add(rendered_label) if (tip_direction is not None): self.set_tip(tip_direction=tip_direction, tip_height=tip_height, tip_width=tip_width, color=color, fill_opacity=fill_opacity, **kwargs)
def test_font_size(): """Test that tex_mobject classes return the correct font_size value after being scaled.""" string = MathTex(0).scale(0.3) assert round(string.font_size, 5) == 14.4
def test_MathTex(): MathTex("a^2 + b^2 = c^2") assert Path(config.media_dir, "Tex", "3879f6b03bc495cd.svg").exists()
def test_double_braces_testing(text_input, length_sub): t1 = MathTex(text_input) assert len(t1.submobjects) == length_sub
def test_font_size_vs_scale(): """Test that scale produces the same results as .scale()""" num = MathTex(0, font_size=12) num_scale = MathTex(0).scale(1 / 4) assert num.height == num_scale.height
def test_MathTex(temp_media_dir): MathTex("a^2 + b^2 = c^2") assert (temp_media_dir / "Tex" / "3879f6b03bc495cd.svg").exists()
def test_double_braces_testing(temp_media_dir, text_input, length_sub): t1 = MathTex(text_input) len(t1.submobjects) == length_sub
def test_MathTex(using_opengl_renderer): MathTex("a^2 + b^2 = c^2") assert Path(config.media_dir, "Tex", "3879f6b03bc495cd.svg").exists()
def test_double_braces_testing(using_opengl_renderer, text_input, length_sub): t1 = MathTex(text_input) assert len(t1.submobjects) == length_sub
def construct(self): matrix1 = Matrix( m1, v_buff=1.3, h_buff=0.8, bracket_h_buff=SMALL_BUFF, bracket_v_buff=SMALL_BUFF) matrix1.set_color(DEFAULT_COLOR) matrix1.get_entries()[0].set_color(RECT_COLOR) matrix1.get_entries()[-1].set_color(RECT_COLOR) self.add(matrix1) matrix2 = Matrix( m2, v_buff=1.3, h_buff=0.8, bracket_h_buff=SMALL_BUFF, bracket_v_buff=SMALL_BUFF) matrix2.set_color(DEFAULT_COLOR) self.add(matrix2) equals = MathTex(r'=') self.add(equals) m3 = (m1@m2) matrix3 = Matrix( m3, v_buff=1.3, h_buff=0.8, bracket_h_buff=SMALL_BUFF, bracket_v_buff=SMALL_BUFF) matrix3.set_color(DEFAULT_COLOR) # args = [BLACK]*m3.shape[1] # matrix3.set_column_colors(*args) for i in matrix3.get_entries(): i.set_opacity(0) self.add(matrix3) g = Group(matrix1, matrix2, equals, matrix3).arrange(buff=1).shift(UP) g.set_color(DEFAULT_COLOR) self.add(g) i = 0 for m1_row in matrix1.get_rows(): for m2_column in matrix2.get_columns(): rect_1 = SurroundingRectangle(m1_row).set_stroke(color=RECT_COLOR) rect_2 = SurroundingRectangle(m2_column).set_stroke(color=RECT_COLOR) self.play(Create(rect_1)) self.wait() self.play(ReplacementTransform(rect_1, rect_2)) math_strings = [] values_to_sum = [] for m1_val, m2_val in zip(m1_row, m2_column): val_left = int(m1_val.get_tex_string()) val_right = int(m2_val.get_tex_string()) values_to_sum.append(val_left * val_right) text_left = m1_val.get_tex_string() text_right = m2_val.get_tex_string() if val_left < 0: text_left = f'({text_left})' if val_right < 0: text_right = f'({text_right})' math_strings.extend([text_left, " \\times ", text_right, " + "]) math_strings = math_strings[:-1] math_strings.extend([" = ", sum(values_to_sum)]) ds_m = MathTex(*math_strings) ds_m.set_color(BLACK) offset = 0 for j in range(m1.shape[0]): pos = j + offset # ds_m[pos].set_color(M1_COLOR) # ds_m[pos + 2].set_color(M2_COLOR) offset += 3 ds_m[-1].set_opacity(0) # ds_m[-1].set_color(CALCULATED_COLOR) ds_m.shift(2 * DOWN) self.play(ReplacementTransform(rect_1, rect_2), Write(ds_m)) self.wait() rect_3 = SurroundingRectangle(matrix3.get_entries()[i]).set_color(RECT_COLOR) # matrix3.get_entries()[i].set_color(CALCULATED_COLOR) self.play( ReplacementTransform(rect_2, rect_3), ApplyMethod(matrix3.get_entries()[i].set_opacity, 1), ApplyMethod(ds_m[-1].set_opacity, 1) ) self.wait() self.remove(ds_m) self.remove(rect_3) m1_row.set_color(BLACK) m2_column.set_color(BLACK) i += 1 self.wait()