from big_ol_pile_of_manim_imports import * class MainScene(Scene): SL = 3 scale_matrix = np.identity(2) * SL matrix = np.array([ [0, 1], [1, 0] ]).T def construct(self): plane = self.make_plane() x_label, t_label = self.make_labels(plane) box = self.make_box() self.wait(0.5) lines = self.make_lines() objects = [plane, *lines] x_label_t = x_label.copy().next_to((4, 0, 0), DL) self.play(*[ApplyMatrix(self.matrix, m, run_time=1) for m in objects] + [Transform(x_label, x_label_t)]) self.wait(3) def make_plane(self): plane = NumberPlane(background_line_style={ "stroke_opacity": 0.5 }) self.add(plane) self.play(ShowCreation(plane, run_time=0.5)) return plane def make_labels(self, plane): x_label = plane.get_x_axis_label("x") t_label = plane.get_y_axis_label("t") self.add(x_label, t_label) self.play(FadeIn(x_label), FadeIn(t_label)) return x_label, t_label def make_box(self): box = Square(side_length=1, color=GREY) box.scale(self.SL) box.move_to((self.SL / 2, self.SL / 2, 0)) self.add(box) self.play(ShowCreation(box, run_time=0.5)) return box def make_lines(self): lines_data = [ { 'color': GREEN, 'coords': [(0, 0, 0), (1, 0.2, 0)] }, { 'color': GREEN, 'coords': [(1, 0.2, 0), (0, 0.4, 0)] }, { 'color': GREEN, 'coords': [(0, 0.4, 0), (1, 0.6, 0)] }, { 'color': GREEN, 'coords': [(1, 0.6, 0), (0, 0.8, 0)] }, { 'color': GREEN, 'coords': [(0, 0.8, 0), (1, 1, 0)] } ] lines = [] for ld in lines_data: l = Line(*(np.array(ld['coords']) * self.SL), stroke_color=ld['color']) lines.append(l) self.add(l) self.play(ShowCreation(l, run_time=1 / len(lines_data))) return lines