specialized.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from __future__ import annotations
  2. from manimlib.animation.composition import LaggedStart
  3. from manimlib.animation.transform import Restore
  4. from manimlib.constants import BLACK, WHITE
  5. from manimlib.mobject.geometry import Circle
  6. from manimlib.mobject.types.vectorized_mobject import VGroup
  7. from typing import TYPE_CHECKING
  8. if TYPE_CHECKING:
  9. import numpy as np
  10. from manimlib.typing import ManimColor
  11. class Broadcast(LaggedStart):
  12. def __init__(
  13. self,
  14. focal_point: np.ndarray,
  15. small_radius: float = 0.0,
  16. big_radius: float = 5.0,
  17. n_circles: int = 5,
  18. start_stroke_width: float = 8.0,
  19. color: ManimColor = WHITE,
  20. run_time: float = 3.0,
  21. lag_ratio: float = 0.2,
  22. remover: bool = True,
  23. **kwargs
  24. ):
  25. self.focal_point = focal_point
  26. self.small_radius = small_radius
  27. self.big_radius = big_radius
  28. self.n_circles = n_circles
  29. self.start_stroke_width = start_stroke_width
  30. self.color = color
  31. circles = VGroup()
  32. for x in range(n_circles):
  33. circle = Circle(
  34. radius=big_radius,
  35. stroke_color=BLACK,
  36. stroke_width=0,
  37. )
  38. circle.add_updater(lambda c: c.move_to(focal_point))
  39. circle.save_state()
  40. circle.set_width(small_radius * 2)
  41. circle.set_stroke(color, start_stroke_width)
  42. circles.add(circle)
  43. super().__init__(
  44. *map(Restore, circles),
  45. run_time=run_time,
  46. lag_ratio=lag_ratio,
  47. remover=remover,
  48. **kwargs
  49. )