mirror of
https://github.com/3b1b/manim.git
synced 2025-07-29 13:03:31 +08:00
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
from __future__ import absolute_import
|
|
|
|
import numpy as np
|
|
|
|
from constants import *
|
|
|
|
from animation.transform import ApplyMethod
|
|
from animation.composition import LaggedStart
|
|
from mobject.svg.drawings import Car
|
|
from mobject.types.vectorized_mobject import VGroup
|
|
from mobject.geometry import Circle
|
|
from utils.config_ops import digest_config
|
|
|
|
class MoveCar(ApplyMethod):
|
|
CONFIG = {
|
|
"moving_forward" : True,
|
|
}
|
|
def __init__(self, car, target_point, **kwargs):
|
|
assert isinstance(car, Car)
|
|
ApplyMethod.__init__(self, car.move_to, target_point, **kwargs)
|
|
displacement = self.target_mobject.get_right()-self.starting_mobject.get_right()
|
|
distance = np.linalg.norm(displacement)
|
|
if not self.moving_forward:
|
|
distance *= -1
|
|
tire_radius = car.get_tires()[0].get_width()/2
|
|
self.total_tire_radians = -distance/tire_radius
|
|
|
|
def update_mobject(self, alpha):
|
|
ApplyMethod.update_mobject(self, alpha)
|
|
if alpha == 0:
|
|
return
|
|
radians = alpha*self.total_tire_radians
|
|
for tire in self.mobject.get_tires():
|
|
tire.rotate_in_place(radians)
|
|
|
|
class Broadcast(LaggedStart):
|
|
CONFIG = {
|
|
"small_radius" : 0.0,
|
|
"big_radius" : 5,
|
|
"n_circles" : 5,
|
|
"start_stroke_width" : 8,
|
|
"color" : WHITE,
|
|
"remover" : True,
|
|
"lag_ratio" : 0.7,
|
|
"run_time" : 3,
|
|
"remover" : True,
|
|
}
|
|
def __init__(self, focal_point, **kwargs):
|
|
digest_config(self, kwargs)
|
|
circles = VGroup()
|
|
for x in range(self.n_circles):
|
|
circle = Circle(
|
|
radius = self.big_radius,
|
|
stroke_color = BLACK,
|
|
stroke_width = 0,
|
|
)
|
|
circle.move_to(focal_point)
|
|
circle.save_state()
|
|
circle.scale_to_fit_width(self.small_radius*2)
|
|
circle.set_stroke(self.color, self.start_stroke_width)
|
|
circles.add(circle)
|
|
LaggedStart.__init__(
|
|
self, ApplyMethod, circles,
|
|
lambda c : (c.restore,),
|
|
**kwargs
|
|
)
|
|
|