def point_to_abstractions(self): objects = self.objects objects.generate_target() objects.target.scale(0.5) objects.target.move_to( (SPACE_HEIGHT*DOWN + SPACE_WIDTH*LEFT)/2 ) eulers = TexMobject(*"V-E+F=2") eulers.highlight_by_tex_to_color_map({ "V" : RED, "E" : GREEN, "F" : BLUE, }) eulers.to_edge(UP, buff = 2) cube = Cube() cube.set_stroke(WHITE, 2) cube.scale_to_fit_height(0.75) cube.pose_at_angle() cube.next_to(eulers, UP) tda = TextMobject("Topological \\\\ Data Analysis") tda.move_to(DOWN + 4*RIGHT) arrow_from_eulers = Arrow( eulers.get_bottom(), tda.get_corner(UP+LEFT), color = WHITE ) self.play( objects.scale, 0.5, objects.move_to, DOWN + 4*LEFT, ) arrow_to_eulers = Arrow( self.houses[2].get_corner(UP+LEFT), eulers.get_bottom(), color = WHITE ) self.add(AmbientRotation(cube, axis = UP)) self.play( GrowArrow(arrow_to_eulers), Write(eulers), FadeIn(cube) ) self.dither(5) self.play( GrowArrow(arrow_from_eulers), Write(tda) ) self.dither(2) self.set_variables_as_attrs( eulers, cube, tda, arrows = VGroup(arrow_to_eulers, arrow_from_eulers), )
def rearrange(self): sqrt_nudge = 0.2*LEFT y, equals = self.y_equals.split() d, sin, squared, theta = self.y_expression.split() y_sqrt = TexMobject("\\sqrt{\\phantom{y}}") d_sqrt = y_sqrt.copy() y_sqrt.shift(y.get_center()+sqrt_nudge) d_sqrt.shift(d.get_center()+sqrt_nudge) self.play( ShimmerIn(y_sqrt), ShimmerIn(d_sqrt), ApplyMethod(squared.shift, 4*UP), ApplyMethod(theta.shift, 1.5* squared.get_width()*LEFT) ) self.dither() y_sqrt.add(y) d_sqrt.add(d) sin.add(theta) sin_over = TexMobject("\\dfrac{\\phantom{\\sin(\\theta)}}{\\quad}") sin_over.next_to(sin, DOWN, 0.15) new_eq = equals.copy() new_eq.next_to(sin_over, LEFT) one_over = TexMobject("\\dfrac{1}{\\quad}") one_over.next_to(new_eq, LEFT) one_over.shift( (sin_over.get_bottom()[1]-one_over.get_bottom()[1])*UP ) self.play( Transform(equals, new_eq), ShimmerIn(sin_over), ShimmerIn(one_over), ApplyMethod( d_sqrt.next_to, one_over, DOWN, path_func = path_along_arc(-np.pi) ), ApplyMethod( y_sqrt.next_to, sin_over, DOWN, path_func = path_along_arc(-np.pi) ), run_time = 2 ) self.dither() brace = Brace(d_sqrt, DOWN) constant = TextMobject("Constant") constant.next_to(brace, DOWN) self.play( GrowFromCenter(brace), ShimmerIn(constant) )
def rearrange(self): sqrt_nudge = 0.2*LEFT y, equals = self.y_equals.split() d, sin, squared, theta = self.y_expression.split() y_sqrt = TexMobject("\\sqrt{\\phantom{y}}") d_sqrt = y_sqrt.copy() y_sqrt.shift(y.get_center()+sqrt_nudge) d_sqrt.shift(d.get_center()+sqrt_nudge) self.play( ShimmerIn(y_sqrt), ShimmerIn(d_sqrt), ApplyMethod(squared.shift, 4*UP), ApplyMethod(theta.shift, 1.5* squared.get_width()*LEFT) ) self.wait() y_sqrt.add(y) d_sqrt.add(d) sin.add(theta) sin_over = TexMobject("\\dfrac{\\phantom{\\sin(\\theta)}}{\\quad}") sin_over.next_to(sin, DOWN, 0.15) new_eq = equals.copy() new_eq.next_to(sin_over, LEFT) one_over = TexMobject("\\dfrac{1}{\\quad}") one_over.next_to(new_eq, LEFT) one_over.shift( (sin_over.get_bottom()[1]-one_over.get_bottom()[1])*UP ) self.play( Transform(equals, new_eq), ShimmerIn(sin_over), ShimmerIn(one_over), ApplyMethod( d_sqrt.next_to, one_over, DOWN, path_func = path_along_arc(-np.pi) ), ApplyMethod( y_sqrt.next_to, sin_over, DOWN, path_func = path_along_arc(-np.pi) ), run_time = 2 ) self.wait() brace = Brace(d_sqrt, DOWN) constant = TextMobject("Constant") constant.next_to(brace, DOWN) self.play( GrowFromCenter(brace), ShimmerIn(constant) )
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.highlight(color) label.scale(label_scale_factor) label.add_background_rectangle() angle = vector.get_angle() if not rotate: label.rotate(-angle) if direction is "left": label.shift(-label.get_bottom() + 0.1 * UP) else: label.shift(-label.get_top() + 0.1 * DOWN) label.rotate(angle) label.shift((vector.get_end() - vector.get_start()) / 2) 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.highlight(color) label.scale(label_scale_factor) label.add_background_rectangle() angle = vector.get_angle() if not rotate: label.rotate(-angle) if direction is "left": label.shift(-label.get_bottom() + 0.1*UP) else: label.shift(-label.get_top() + 0.1*DOWN) label.rotate(angle) label.shift((vector.get_end() - vector.get_start())/2) return label
def show_dfs(self): dx_lines = VGroup() df_lines = VGroup() df_dx_groups = VGroup() df_labels = VGroup() for i, v_line1, v_line2 in zip(it.count(1), self.v_lines, self.v_lines[1:]): dx_line = Line( v_line1.get_bottom(), v_line2.get_bottom(), color = GREEN ) dx_line.move_to(v_line1.get_top(), LEFT) dx_lines.add(dx_line) df_line = Line( dx_line.get_right(), v_line2.get_top(), color = YELLOW ) df_lines.add(df_line) df_label = TexMobject("df_%d"%i) df_label.highlight(YELLOW) df_label.scale(0.8) df_label.next_to(df_line.get_center(), UP+LEFT, MED_LARGE_BUFF) df_arrow = Arrow( df_label.get_bottom(), df_line.get_center(), buff = SMALL_BUFF, ) df_line.label = df_label df_line.arrow = df_arrow df_labels.add(df_label) df_dx_groups.add(VGroup(df_line, dx_line)) for brace, dx_line, df_line in zip(self.braces, dx_lines, df_lines): self.play( VGroup(brace, brace.dx).next_to, dx_line, DOWN, SMALL_BUFF, FadeIn(dx_line), ) self.play(ShowCreation(df_line)) self.play( ShowCreation(df_line.arrow), Write(df_line.label) ) self.wait(2) self.df_dx_groups = df_dx_groups self.df_labels = df_labels
def show_dfs(self): dx_lines = VGroup() df_lines = VGroup() df_dx_groups = VGroup() df_labels = VGroup() for i, v_line1, v_line2 in zip(it.count(1), self.v_lines, self.v_lines[1:]): dx_line = Line( v_line1.get_bottom(), v_line2.get_bottom(), color = GREEN ) dx_line.move_to(v_line1.get_top(), LEFT) dx_lines.add(dx_line) df_line = Line( dx_line.get_right(), v_line2.get_top(), color = YELLOW ) df_lines.add(df_line) df_label = TexMobject("df_%d"%i) df_label.highlight(YELLOW) df_label.scale(0.8) df_label.next_to(df_line.get_center(), UP+LEFT, MED_LARGE_BUFF) df_arrow = Arrow( df_label.get_bottom(), df_line.get_center(), buff = SMALL_BUFF, ) df_line.label = df_label df_line.arrow = df_arrow df_labels.add(df_label) df_dx_groups.add(VGroup(df_line, dx_line)) for brace, dx_line, df_line in zip(self.braces, dx_lines, df_lines): self.play( VGroup(brace, brace.dx).next_to, dx_line, DOWN, SMALL_BUFF, FadeIn(dx_line), ) self.play(ShowCreation(df_line)) self.play( ShowCreation(df_line.arrow), Write(df_line.label) ) self.dither(2) self.df_dx_groups = df_dx_groups self.df_labels = df_labels