def setup_in_uv_space(self): u_values, v_values = self.get_u_values_and_v_values() faces = VGroup() for i in range(len(u_values) - 1): for j in range(len(v_values) - 1): u1, u2 = u_values[i:i + 2] v1, v2 = v_values[j:j + 2] face = ThreeDVMobject() face.set_points_as_corners([ [u1, v1, 0], [u2, v1, 0], [u2, v2, 0], [u1, v2, 0], [u1, v1, 0], ]) faces.add(face) face.u_index = i face.v_index = j face.u1 = u1 face.u2 = u2 face.v1 = v1 face.v2 = v2 faces.set_fill(color=self.fill_color, opacity=self.fill_opacity) faces.set_stroke( color=self.stroke_color, width=self.stroke_width, opacity=self.stroke_opacity, ) self.add(*faces) if self.checkerboard_colors: self.set_fill_by_checkerboard(*self.checkerboard_colors)
def create_lines(self): lines = VGroup() for angle in np.arange(0, consts.TAU, consts.TAU / self.num_lines): line = Line(consts.ORIGIN, self.line_length * consts.RIGHT) line.shift((self.flash_radius - self.line_length) * consts.RIGHT) line.rotate(angle, about_point=consts.ORIGIN) lines.add(line) lines.set_color(self.color) lines.set_stroke(width=3) lines.add_updater(lambda l: l.move_to(self.point)) return lines