from __future__ import annotations from manimlib.animation.composition import LaggedStart from manimlib.animation.transform import Restore from manimlib.constants import BLACK, WHITE from manimlib.mobject.geometry import Circle from manimlib.mobject.types.vectorized_mobject import VGroup from typing import TYPE_CHECKING if TYPE_CHECKING: import numpy as np from manimlib.typing import ManimColor class Broadcast(LaggedStart): def __init__( self, focal_point: np.ndarray, small_radius: float = 0.0, big_radius: float = 5.0, n_circles: int = 5, start_stroke_width: float = 8.0, color: ManimColor = WHITE, run_time: float = 3.0, lag_ratio: float = 0.2, remover: bool = True, **kwargs ): self.focal_point = focal_point self.small_radius = small_radius self.big_radius = big_radius self.n_circles = n_circles self.start_stroke_width = start_stroke_width self.color = color circles = VGroup() for x in range(n_circles): circle = Circle( radius=big_radius, stroke_color=BLACK, stroke_width=0, ) circle.add_updater(lambda c: c.move_to(focal_point)) circle.save_state() circle.set_width(small_radius * 2) circle.set_stroke(color, start_stroke_width) circles.add(circle) super().__init__( *map(Restore, circles), run_time=run_time, lag_ratio=lag_ratio, remover=remover, **kwargs )