3b1b-manim/manimlib/animation/specialized.py
2022-12-16 20:19:18 -08:00

55 lines
1.6 KiB
Python

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
)