mirror of
https://github.com/3b1b/videos.git
synced 2025-08-31 21:58:59 +00:00
Add MoveCar
This commit is contained in:
parent
69850f88fa
commit
51e5de9ad1
1 changed files with 36 additions and 0 deletions
|
@ -92,6 +92,42 @@ class Car(SVGMobject):
|
|||
return self[1][4]
|
||||
|
||||
|
||||
class MoveCar(ApplyMethod):
|
||||
CONFIG = {
|
||||
"moving_forward": True,
|
||||
"run_time": 5,
|
||||
}
|
||||
|
||||
def __init__(self, car, target_point, **kwargs):
|
||||
self.check_if_input_is_car(car)
|
||||
self.target_point = target_point
|
||||
super().__init__(car.move_to, target_point, **kwargs)
|
||||
|
||||
def check_if_input_is_car(self, car):
|
||||
if not isinstance(car, Car):
|
||||
raise Exception("MoveCar must take in Car object")
|
||||
|
||||
def begin(self):
|
||||
super().begin()
|
||||
car = self.mobject
|
||||
distance = get_norm(op.sub(
|
||||
self.target_mobject.get_right(),
|
||||
self.starting_mobject.get_right(),
|
||||
))
|
||||
if not self.moving_forward:
|
||||
distance *= -1
|
||||
tire_radius = car.get_tires()[0].get_width() / 2
|
||||
self.total_tire_radians = -distance / tire_radius
|
||||
|
||||
def interpolate_mobject(self, alpha):
|
||||
ApplyMethod.interpolate_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 PartyHat(SVGMobject):
|
||||
CONFIG = {
|
||||
"file_name": "party_hat",
|
||||
|
|
Loading…
Add table
Reference in a new issue