From 45b8ce2119d8b8bd923ec86bf34fe40f91dce9eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Neuh=C3=A4user?= Date: Thu, 20 Nov 2025 23:48:36 +0100 Subject: [PATCH] fmt --- main.py | 470 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 314 insertions(+), 156 deletions(-) diff --git a/main.py b/main.py index 1b53f7d..924127f 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,11 @@ from manim import * shift_pos = LEFT * config.frame_width / 4 -graph_pos = RIGHT*3 + UP *2 -graph_pos_left = graph_pos + LEFT*2 -text_pos_1 = (1.5, 3,0) -text_pos_2 = (3.0, 3,0) -start_size=config.frame_width / 2.5 +graph_pos = RIGHT * 3 + UP * 2 +graph_pos_left = graph_pos + LEFT * 2 +text_pos_1 = (1.5, 3, 0) +text_pos_2 = (3.0, 3, 0) +start_size = config.frame_width / 2.5 start_rad = 0.3 l1_color = PURPLE l2_color = LIGHT_PINK @@ -17,32 +17,37 @@ l5_color = PINK class DefaultTemplate(ThreeDScene): def construct(self): plus = Text("+") - plus.move_to(text_pos_1).shift(((text_pos_2[0]-text_pos_1[0])/2,0,0)) + plus.move_to(text_pos_1).shift(((text_pos_2[0] - text_pos_1[0]) / 2, 0, 0)) equal = Text("=") - equal.move_to(text_pos_1).shift(((text_pos_2[0]-text_pos_1[0])*1.5,0,0)) + equal.move_to(text_pos_1).shift(((text_pos_2[0] - text_pos_1[0]) * 1.5, 0, 0)) top = Square(color=WHITE, side_length=start_size) top.shift(shift_pos) - l1 = Square(color=l1_color, side_length=start_size, grid_xstep=start_size/2, grid_ystep=start_size/2) + l1 = Square( + color=l1_color, + side_length=start_size, + grid_xstep=start_size / 2, + grid_ystep=start_size / 2, + ) l1.set_z_index(-1) l1.shift(shift_pos) - def create_node(color,kg, destination, radius=start_rad): + def create_node(color, kg, destination, radius=start_rad): node = Circle(color=color, radius=radius) node.move_to(destination) - t = Text(str(kg), font_size=(25*1/start_rad)*radius) + t = Text(str(kg), font_size=(25 * 1 / start_rad) * radius) t.move_to(node) node = VGroup(node, t) return node def animate_dot_2_node(dot, node): new_node = dot.copy() - self.play(Transform(new_node,node)) + self.play(Transform(new_node, node)) return new_node - def add_2_nodes(n1,n2, s, write=True,scale=1,color=GREEN): + def add_2_nodes(n1, n2, s, write=True, scale=1, color=GREEN): self.play(n1.animate.move_to(text_pos_1)) if write: self.play(Write(plus)) @@ -51,137 +56,171 @@ class DefaultTemplate(ThreeDScene): self.play(Write(equal)) result = create_node(color, s, equal) - result.shift(((text_pos_2[0]-text_pos_1[0])/2,0,0)) + result.shift(((text_pos_2[0] - text_pos_1[0]) / 2, 0, 0)) result.scale(scale) self.play(Create(result)) return result - def get_sub(root, rad=0.75,start=-2): + def get_sub(root, rad=0.75, start=-2): slots = VGroup() - for i in range(start,2): + for i in range(start, 2): if start != -2 and i == start: sub = create_node(GRAY_D, "...", root) else: - sub = create_node(GRAY_D,i+2, root) + sub = create_node(GRAY_D, i + 2, root) sub.scale(rad) - sub.shift(((i+0.5)*rad,-1,0)) + sub.shift(((i + 0.5) * rad, -1, 0)) slots.add(sub) return slots - def get_square_text(div=1,offset_x=0,offset_y=0): + def get_square_text(div=1, offset_x=0, offset_y=0): slots = VGroup() - i= 0 - for y in [1,-1]: + i = 0 + for y in [1, -1]: for x in [-1, 1]: - text = Text(text=str(i),font_size=int(50/div)) + text = Text(text=str(i), font_size=int(50 / div)) text.move_to(l1) - text.shift((x*start_size/4/div +offset_x,y*start_size/4/div+offset_y,0)) + text.shift( + ( + x * start_size / 4 / div + offset_x, + y * start_size / 4 / div + offset_y, + 0, + ) + ) slots.add(text) - i+=1 + i += 1 return slots def hide_text(): self.play(Unwrite(plus), Unwrite(equal)) self.play(Create(top)) - - #self.wait(1) - p1 = self.add_particle((1,2,0), BLUE_C) - p1_node = create_node(BLUE,5, graph_pos) - #self.wait(10) - p1_node = animate_dot_2_node(p1,p1_node) + # self.wait(1) + + p1 = self.add_particle((1, 2, 0), BLUE_C) + p1_node = create_node(BLUE, 5, graph_pos) + # self.wait(10) + p1_node = animate_dot_2_node(p1, p1_node) self.play(p1.animate.set_color(GRAY)) - p2 =self.add_particle((-2,1,0), BLUE_C,0.5, False) + p2 = self.add_particle((-2, 1, 0), BLUE_C, 0.5, False) - p2_node = create_node(BLUE,1, graph_pos_left) - p2_node = animate_dot_2_node(p2,p2_node) + p2_node = create_node(BLUE, 1, graph_pos_left) + p2_node = animate_dot_2_node(p2, p2_node) - root_1 = add_2_nodes(p1_node,p2_node, 6,color=l1_color) + root_1 = add_2_nodes(p1_node, p2_node, 6, color=l1_color) self.play(root_1.animate.move_to(graph_pos)) sub_nodes_r1 = get_sub(root_1) sub_text_r1 = get_square_text() - + self.play(Create(l1)) - + for i, n in enumerate(sub_nodes_r1): arrow = Arrow(start=root_1.get_center(), end=n.get_center(), color=BLUE) new = root_1.copy() - self.play(Write(sub_text_r1[i]),Transform(new,VGroup(n,arrow))) + self.play(Write(sub_text_r1[i]), Transform(new, VGroup(n, arrow))) sub_nodes_r1[i] = new for i, n in enumerate(sub_text_r1): - self.play(n.animate.set_color(GRAY_D),l1.animate.set_stroke(opacity=0.5),run_time=0.2) + self.play( + n.animate.set_color(GRAY_D), + l1.animate.set_stroke(opacity=0.5), + run_time=0.2, + ) - self.play(p2_node.animate.scale(0.75),p1_node.animate.scale(0.75)) - self.play(p1_node.animate.move_to(sub_nodes_r1[1][0]),FadeOut(sub_nodes_r1[1][0])) - self.play(p2_node.animate.move_to(sub_nodes_r1[0][0]),FadeOut(sub_nodes_r1[0][0])) + self.play(p2_node.animate.scale(0.75), p1_node.animate.scale(0.75)) + self.play( + p1_node.animate.move_to(sub_nodes_r1[1][0]), FadeOut(sub_nodes_r1[1][0]) + ) + self.play( + p2_node.animate.move_to(sub_nodes_r1[0][0]), FadeOut(sub_nodes_r1[0][0]) + ) self.play(p2.animate.set_color(GRAY)) - p3 =self.add_particle((1,1,0), BLUE_C,0, False) - p3_node = create_node(BLUE,8, graph_pos_left) - p3_node = animate_dot_2_node(p3,p3_node) - root_1_1 = add_2_nodes(p3_node,root_1, 14, False, color=l1_color) + p3 = self.add_particle((1, 1, 0), BLUE_C, 0, False) + p3_node = create_node(BLUE, 8, graph_pos_left) + p3_node = animate_dot_2_node(p3, p3_node) + root_1_1 = add_2_nodes(p3_node, root_1, 14, False, color=l1_color) self.play(root_1_1.animate.move_to(graph_pos)) self.play(FadeOut(root_1)) root_1 = root_1_1 - root_2 = add_2_nodes(p3_node,p1_node, 13, False, 0.75, l2_color) + root_2 = add_2_nodes(p3_node, p1_node, 13, False, 0.75, l2_color) self.play(root_2.animate.move_to(sub_nodes_r1[1][0])) - l2 = Square(color=l2_color, side_length=start_size/2, grid_xstep=start_size/4, grid_ystep=start_size/4) - l2.shift((start_size/4,start_size/4,0)) + l2 = Square( + color=l2_color, + side_length=start_size / 2, + grid_xstep=start_size / 4, + grid_ystep=start_size / 4, + ) + l2.shift((start_size / 4, start_size / 4, 0)) l2.set_z_index(-2) l2.shift(shift_pos) self.play(Create(l2)) - sub_nodes_r2 = get_sub(root_2, 0.75*0.75) - sub_text_r2 = get_square_text(2, start_size/4,start_size/4) + sub_nodes_r2 = get_sub(root_2, 0.75 * 0.75) + sub_text_r2 = get_square_text(2, start_size / 4, start_size / 4) for i, n in enumerate(sub_nodes_r2): arrow = Arrow(start=root_2.get_center(), end=n.get_center(), color=BLUE) new = root_2.copy() - self.play(Write(sub_text_r2[i]),Transform(new,VGroup(n,arrow))) + self.play(Write(sub_text_r2[i]), Transform(new, VGroup(n, arrow))) sub_nodes_r2[i] = new for i, n in enumerate(sub_text_r2): - self.play(n.animate.set_color(GRAY_D),l2.animate.set_stroke(opacity=0.5),run_time=0.2) - - self.play(p1_node.animate.scale(0.75),p3_node.animate.scale(0.75*0.75)) - self.play(p1_node.animate.move_to(sub_nodes_r2[0][0]),FadeOut(sub_nodes_r2[0][0])) - self.play(p3_node.animate.move_to(sub_nodes_r2[2][0]),FadeOut(sub_nodes_r2[2][0])) + self.play( + n.animate.set_color(GRAY_D), + l2.animate.set_stroke(opacity=0.5), + run_time=0.2, + ) + + self.play(p1_node.animate.scale(0.75), p3_node.animate.scale(0.75 * 0.75)) + self.play( + p1_node.animate.move_to(sub_nodes_r2[0][0]), FadeOut(sub_nodes_r2[0][0]) + ) + self.play( + p3_node.animate.move_to(sub_nodes_r2[2][0]), FadeOut(sub_nodes_r2[2][0]) + ) self.play(p3.animate.set_color(GRAY)) - p4 =self.add_particle((2,-1.8,0), BLUE_C,0, False) - p4_node = create_node(BLUE,42, graph_pos_left) - p4_node = animate_dot_2_node(p4,p4_node) - root_1_1 = add_2_nodes(p4_node,root_1, 56, False, color=l1_color) + p4 = self.add_particle((2, -1.8, 0), BLUE_C, 0, False) + p4_node = create_node(BLUE, 42, graph_pos_left) + p4_node = animate_dot_2_node(p4, p4_node) + root_1_1 = add_2_nodes(p4_node, root_1, 56, False, color=l1_color) self.play(root_1_1.animate.move_to(graph_pos)) self.play(FadeOut(root_1)) root_1 = root_1_1 self.play(p4_node.animate.scale(0.75), p4.animate.set_color(GRAY)) - self.play(p4_node.animate.move_to(sub_nodes_r1[3][0]),FadeOut(sub_nodes_r1[3][0])) + self.play( + p4_node.animate.move_to(sub_nodes_r1[3][0]), FadeOut(sub_nodes_r1[3][0]) + ) - #P5 - p5 =self.add_particle((2.5,-2.3,0), BLUE_C,0, False) - p5_node = create_node(BLUE,2, graph_pos_left) - p5_node = animate_dot_2_node(p5,p5_node) - root_1_1 = add_2_nodes(p5_node,root_1, 58, False, color=l1_color) + # P5 + p5 = self.add_particle((2.5, -2.3, 0), BLUE_C, 0, False) + p5_node = create_node(BLUE, 2, graph_pos_left) + p5_node = animate_dot_2_node(p5, p5_node) + root_1_1 = add_2_nodes(p5_node, root_1, 58, False, color=l1_color) self.play(root_1_1.animate.move_to(graph_pos)) self.play(FadeOut(root_1)) root_1 = root_1_1 - root_2_4 = add_2_nodes(p5_node,p4_node, 44, False,0.75, color=l2_color) + root_2_4 = add_2_nodes(p5_node, p4_node, 44, False, 0.75, color=l2_color) self.play(root_2_4.animate.move_to(sub_nodes_r1[3][0])) - l3 = Square(color=l2_color, side_length=start_size/2, grid_xstep=start_size/4, grid_ystep=start_size/4) - l3.shift((start_size/4,-start_size/4,0)) + l3 = Square( + color=l2_color, + side_length=start_size / 2, + grid_xstep=start_size / 4, + grid_ystep=start_size / 4, + ) + l3.shift((start_size / 4, -start_size / 4, 0)) l3.set_z_index(-2) l3.shift(shift_pos) self.play(Create(l3)) - sub_nodes_r24 = get_sub(root_2_4, 0.75,0) - sub_text_r24 = get_square_text(2, start_size/4,-start_size/4) + sub_nodes_r24 = get_sub(root_2_4, 0.75, 0) + sub_text_r24 = get_square_text(2, start_size / 4, -start_size / 4) for n in sub_text_r24: self.play(Write(n)) @@ -189,20 +228,27 @@ class DefaultTemplate(ThreeDScene): for i, n in enumerate(sub_nodes_r24): arrow = Arrow(start=root_2_4.get_center(), end=n.get_center(), color=BLUE) new = root_2_4.copy() - self.play(Transform(new,VGroup(n,arrow))) + self.play(Transform(new, VGroup(n, arrow))) sub_nodes_r24[i] = new - - self.play(p4_node.animate.move_to(sub_nodes_r24[1][0]),FadeOut(sub_nodes_r24[1][0])) - self.play(p4_node.animate.scale(0.75),l3.animate.set_stroke(opacity=0.5)) - #l4 - l4 = Square(color=l3_color, side_length=start_size/4, grid_xstep=start_size/8, grid_ystep=start_size/8) - l4.shift(((start_size/4) *1.5,(-start_size/4) *1.5,0)) + self.play( + p4_node.animate.move_to(sub_nodes_r24[1][0]), FadeOut(sub_nodes_r24[1][0]) + ) + self.play(p4_node.animate.scale(0.75), l3.animate.set_stroke(opacity=0.5)) + + # l4 + l4 = Square( + color=l3_color, + side_length=start_size / 4, + grid_xstep=start_size / 8, + grid_ystep=start_size / 8, + ) + l4.shift(((start_size / 4) * 1.5, (-start_size / 4) * 1.5, 0)) l4.set_z_index(-3) l4.shift(shift_pos) self.play(Create(l4)) - root_3 = add_2_nodes(p5_node,p4_node, 44, False, 0.75**2,l3_color) + root_3 = add_2_nodes(p5_node, p4_node, 44, False, 0.75**2, l3_color) self.play(root_3.animate.move_to(sub_nodes_r24[1][0])) sub_nodes_r3 = get_sub(root_3, 0.75**3) @@ -210,63 +256,111 @@ class DefaultTemplate(ThreeDScene): for i, n in enumerate(sub_nodes_r3): arrow = Arrow(start=root_3.get_center(), end=n.get_center(), color=BLUE) new = root_3.copy() - self.play(Transform(new,VGroup(n,arrow))) + self.play(Transform(new, VGroup(n, arrow))) sub_nodes_r3[i] = new - self.play(p5_node.animate.scale(0.75**3),p4_node.animate.scale(0.75), run_time=0.3) - self.play(p4_node.animate.move_to(sub_nodes_r3[0][0]),FadeOut(sub_nodes_r3[0][0])) - self.play(p5_node.animate.move_to(sub_nodes_r3[3][0]),FadeOut(sub_nodes_r3[3][0])) + self.play( + p5_node.animate.scale(0.75**3), p4_node.animate.scale(0.75), run_time=0.3 + ) + self.play( + p4_node.animate.move_to(sub_nodes_r3[0][0]), FadeOut(sub_nodes_r3[0][0]) + ) + self.play( + p5_node.animate.move_to(sub_nodes_r3[3][0]), FadeOut(sub_nodes_r3[3][0]) + ) hide_text() - graph = VGroup(p1_node,p2_node,p3_node,p4_node,p5_node,root_1,root_2,root_2_4,root_3,sub_nodes_r1,sub_nodes_r2,sub_nodes_r24,sub_nodes_r3,sub_text_r1,sub_text_r2,sub_text_r24) - self.play(FadeOut(graph),p5.animate.set_color(GRAY)) + sub_nodes_r1[0][0] = sub_nodes_r1[0][1] + sub_nodes_r1[1][0] = sub_nodes_r1[1][1] + sub_nodes_r1[3][0] = sub_nodes_r1[3][1] + + sub_nodes_r2[0][0] = sub_nodes_r2[0][1] + sub_nodes_r2[2][0] = sub_nodes_r2[2][1] + + sub_nodes_r24[1][0] = sub_nodes_r24[1][1] + + sub_nodes_r3[0][0] = sub_nodes_r3[0][1] + sub_nodes_r3[3][0] = sub_nodes_r3[3][1] + + graph = VGroup( + p1_node, + p2_node, + p3_node, + p4_node, + p5_node, + root_1, + root_2, + root_2_4, + root_3, + sub_nodes_r1, + sub_nodes_r2, + sub_nodes_r24, + sub_nodes_r3, + ) + graph.save_state() + self.play( + FadeOut(graph), + p5.animate.set_color(GRAY), + FadeOut(sub_text_r1), + FadeOut(sub_text_r2), + FadeOut(sub_text_r24), + ) v = self.add_particles_and_squares() + self.play( + l1.animate.set_stroke(opacity=1), + l3.animate.set_stroke(opacity=1), + l2.animate.set_stroke(opacity=1), + run_time=0.3, + ) + diagram = VGroup(v, top, p1, p2, p3, p4, p5, l1, l2, l3, l4) - - - self.begin_ambient_camera_rotation(90*DEGREES/3, about='phi') - - self.play(diagram.animate.move_to((0,0,0)),run_time=2.5) - self.stop_ambient_camera_rotation(about='phi') + self.begin_ambient_camera_rotation(90 * DEGREES / 3, about="phi") - self.begin_ambient_camera_rotation(360*DEGREES/10.5, about='theta') - self.play(l1.animate.set_stroke(opacity=1),l3.animate.set_stroke(opacity=1), - l2.animate.set_stroke(opacity=1),run_time=0.3) - self.play(top.animate.shift((0,0,2)),l1.animate.shift((0,0,0)), - l2.animate.shift((0,0,0)),l3.animate.shift((0,0,0)),l4.animate.shift((0,0,-1)), - p4.animate.shift((0,0,-2)),p5.animate.shift((0,0,-1)),p2.animate.shift((0,0,-2)) - ,p1.animate.shift((0,0,-3)) - ,*[x.animate.shift((0,0,0)) for x in v[0]] - ,*[x.animate.shift((0,0,-1)) for x in v[1]], - *[x.animate.shift((0,0,-2)) for x in v[2]], - *[x.animate.shift((0,0,-3)) for x in v[3]],run_time= 3) - self.wait(2.5) + self.play(diagram.animate.move_to((0, 0, 0)), run_time=2.5) + diagram.save_state() - self.wait(2.5) - #Undo Movement - self.play(top.animate.shift((0,0,-2)),l1.animate.shift((0,0,0)), - l2.animate.shift((0,0,0)),l3.animate.shift((0,0,0)),l4.animate.shift((0,0,1)), - p4.animate.shift((0,0,2)),p5.animate.shift((0,0,1)),p2.animate.shift((0,0,2)) - ,p1.animate.shift((0,0,3)) - ,*[x.animate.shift((0,0,0)) for x in v[0]] - ,*[x.animate.shift((0,0,1)) for x in v[1]], - *[x.animate.shift((0,0,2)) for x in v[2]], - *[x.animate.shift((0,0,3)) for x in v[3]],run_time= 2.5) - self.stop_ambient_camera_rotation(about='theta') + self.stop_ambient_camera_rotation(about="phi") - self.begin_ambient_camera_rotation(-90*DEGREES/3, about='phi') - self.play(diagram.animate.move_to(shift_pos),run_time=2.5) - self.stop_ambient_camera_rotation(about='phi') - self.wait(4) + self.play( + top.animate.shift((0, 0, 2)), + l4.animate.shift((0, 0, -1)), + p4.animate.shift((0, 0, -2)), + p5.animate.shift((0, 0, -1)), + p2.animate.shift((0, 0, -2)), + p1.animate.shift((0, 0, -3)), + *[x.animate.shift((0, 0, 0)) for x in v[0]], + *[x.animate.shift((0, 0, -1)) for x in v[1]], + *[x.animate.shift((0, 0, -2)) for x in v[2]], + *[x.animate.shift((0, 0, -3)) for x in v[3]], + run_time=2, + ) + + self.play( + Rotate( + diagram, angle=360 * DEGREES, rate_func=rate_functions.ease_in_out_cubic + ), + run_time=5, + ) + + self.begin_ambient_camera_rotation(-90 * DEGREES / 3, about="phi") + self.play(Restore(diagram), run_time=2.5) + self.stop_ambient_camera_rotation(about="phi") + self.wait(1) + diagram = diagram[1:] + self.play(FadeOut(v), run_time=0.5) + self.play(Restore(graph), diagram.animate.move_to(shift_pos)) + self.wait(3) return - def create_square(self,color, size, shift_pos, z_index, shift_values): - square = Square(color=color, side_length=size, grid_xstep=size/2, grid_ystep=size/2) + def create_square(self, color, size, shift_pos, z_index, shift_values): + square = Square( + color=color, side_length=size, grid_xstep=size / 2, grid_ystep=size / 2 + ) square.shift(shift_values) square.set_z_index(z_index) square.shift(shift_pos) @@ -275,59 +369,123 @@ class DefaultTemplate(ThreeDScene): def add_particles_and_squares(self): t = 0.2 - p6 =self.add_particle((-2.7, -2.7, 0), GRAY, t, False) - p7 =self.add_particle((-2.1, -1.1, 0), GRAY, t, False) - l7 = self.create_square(l2_color, start_size / 2, shift_pos, -2, (-start_size / 4, -start_size / 4, 0)) + p6 = self.add_particle((-2.7, -2.7, 0), GRAY, t, False) + p7 = self.add_particle((-2.1, -1.1, 0), GRAY, t, False) + l7 = self.create_square( + l2_color, + start_size / 2, + shift_pos, + -2, + (-start_size / 4, -start_size / 4, 0), + ) - p8 =self.add_particle((1.1, 2.7, 0), GRAY, t, False) - l8 = self.create_square(l3_color, start_size / 4, shift_pos, -3, ((start_size / 4) * 0.5, (start_size / 4) * 1.5, 0)) + p8 = self.add_particle((1.1, 2.7, 0), GRAY, t, False) + l8 = self.create_square( + l3_color, + start_size / 4, + shift_pos, + -3, + ((start_size / 4) * 0.5, (start_size / 4) * 1.5, 0), + ) - p9 =self.add_particle((1.67, 1.24, 0), GRAY, t, False) - p11 =self.add_particle((-0.92, 2.12, 0), GRAY, t, False) - l10 = self.create_square(l2_color, start_size / 2, shift_pos, -2, (-start_size / 4, start_size / 4, 0)) + p9 = self.add_particle((1.67, 1.24, 0), GRAY, t, False) + p11 = self.add_particle((-0.92, 2.12, 0), GRAY, t, False) + l10 = self.create_square( + l2_color, + start_size / 2, + shift_pos, + -2, + (-start_size / 4, start_size / 4, 0), + ) - p12 =self.add_particle((1.13, -1.45, 0), GRAY, t, False) - p13 =self.add_particle((-2.48, 0.58, 0), GRAY, t, False) - l12 = self.create_square(l3_color, start_size / 4, shift_pos, -3, (-(start_size / 4) * 1.5, (start_size / 4) * 0.5, 0)) + p12 = self.add_particle((1.13, -1.45, 0), GRAY, t, False) + p13 = self.add_particle((-2.48, 0.58, 0), GRAY, t, False) + l12 = self.create_square( + l3_color, + start_size / 4, + shift_pos, + -3, + (-(start_size / 4) * 1.5, (start_size / 4) * 0.5, 0), + ) + p14 = self.add_particle((0.62, -2.14, 0), GRAY, t, False) + p15 = self.add_particle((2.35, -1.78, 0), GRAY, t, False) + p16 = self.add_particle((-1.61, 0.91, 0), GRAY, t, False) + l16 = self.create_square( + l4_color, + start_size / 8, + shift_pos, + -4, + (-(start_size / 4) * 1.25, (start_size / 4) * 0.75, 0), + ) - p14 =self.add_particle((0.62, -2.14, 0), GRAY, t, False) - p15 =self.add_particle((2.35, -1.78, 0), GRAY, t, False) - p16 =self.add_particle((-1.61, 0.91, 0), GRAY, t, False) - l16 = self.create_square(l4_color, start_size / 8, shift_pos, -4, (-(start_size / 4) * 1.25, (start_size / 4) * 0.75, 0)) + p17 = self.add_particle((-2.35, -0.98, 0), GRAY, t, False) + l17 = self.create_square( + l3_color, + start_size / 4, + shift_pos, + -3, + (-(start_size / 4) * 1.5, -(start_size / 4) * 0.5, 0), + ) - p17 =self.add_particle((-2.35, -0.98, 0), GRAY, t, False) - l17 = self.create_square(l3_color, start_size / 4, shift_pos, -3, (-(start_size / 4) * 1.5, -(start_size / 4) * 0.5, 0)) + p18 = self.add_particle((0.84, 1.95, 0), GRAY, t, False) + l18 = self.create_square( + l4_color, + start_size / 8, + shift_pos, + -4, + ((start_size / 4) * 0.75, (start_size / 4) * 1.25, 0), + ) - p18 =self.add_particle((0.84, 1.95, 0), GRAY, t, False) - l18 = self.create_square(l4_color, start_size / 8, shift_pos, -4, ((start_size / 4) * 0.75, (start_size / 4) * 1.25, 0)) + l19 = self.create_square( + l5_color, + start_size / 16, + shift_pos, + -5, + ((start_size / 4) * 0.625, (start_size / 4) * 1.375, 0), + ) - l19 = self.create_square(l5_color, start_size / 16, shift_pos, -5, ((start_size / 4) * 0.625, (start_size / 4) * 1.375, 0)) - p20 = self.add_particle((0.5, -0.5, 0), GRAY, t, False) - l20 = self.create_square(l3_color, start_size / 4, shift_pos, -3, ((start_size / 4) * 0.5, -(start_size / 4) * 0.5, 0)) + l20 = self.create_square( + l3_color, + start_size / 4, + shift_pos, + -3, + ((start_size / 4) * 0.5, -(start_size / 4) * 0.5, 0), + ) p21 = self.add_particle((-1.8, 1.4, 0), GRAY, t, False) p22 = self.add_particle((1.5, -2.0, 0), GRAY, t, False) - l22 = self.create_square(l4_color, start_size / 8, shift_pos, -4, ((start_size / 4) * 1.25, -(start_size / 4) * 1.25, 0)) + l22 = self.create_square( + l4_color, + start_size / 8, + shift_pos, + -4, + ((start_size / 4) * 1.25, -(start_size / 4) * 1.25, 0), + ) p23 = self.add_particle((-0.5, -1.6, 0), GRAY, t, False) p24 = self.add_particle((-2.0, -2.2, 0), GRAY, t, False) - l24 = self.create_square(l3_color, start_size / 4, shift_pos, -3, (-(start_size / 4) * 1.5, -(start_size / 4) * 1.5, 0)) + l24 = self.create_square( + l3_color, + start_size / 4, + shift_pos, + -3, + (-(start_size / 4) * 1.5, -(start_size / 4) * 1.5, 0), + ) - l2_g = VGroup(l7, p9, l10, p11, p14,p23) - l3_g = VGroup(p13, p7, p8, l8, p15, l12, p17, l17,p20, p12,l20,p24,p6,l24) - l4_g = VGroup(p16, l18, l16, p22,l22,p21) + l2_g = VGroup(l7, p9, l10, p11, p14, p23) + l3_g = VGroup(p13, p7, p8, l8, p15, l12, p17, l17, p20, p12, l20, p24, p6, l24) + l4_g = VGroup(p16, l18, l16, p22, l22, p21) l5_g = VGroup(p18, l19) - return VGroup(l2_g,l3_g,l4_g,l5_g) + return VGroup(l2_g, l3_g, l4_g, l5_g) - - def add_particle(self,point,color, runtime=1, write=True): + def add_particle(self, point, color, runtime=1, write=True): dot = Dot(color=color) dot.move_to((shift_pos)) - lable = Text(f"{point[:2]}",font_size=25,color=color) - lable.shift(tuple(x+0.35 for x in point)) - if runtime>0: - if runtime<=0.3: + lable = Text(f"{point[:2]}", font_size=25, color=color) + lable.shift(tuple(x + 0.35 for x in point)) + if runtime > 0: + if runtime <= 0.3: dot.shift(point) self.play(Create(dot), run_time=runtime) else: @@ -338,8 +496,8 @@ class DefaultTemplate(ThreeDScene): self.add(dot) if write: lable.move_to(dot) - lable.shift((0.5,0.2,0)) + lable.shift((0.5, 0.2, 0)) self.play(Write(lable)) - #self.wait(1) + # self.wait(1) self.play(FadeOut(lable)) - return dot \ No newline at end of file + return dot