From 51e5de9ad13e970b77974e8cd161877cdc99b144 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Fri, 1 Jan 2021 21:11:27 -0800 Subject: [PATCH] Add MoveCar --- custom/drawings.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/custom/drawings.py b/custom/drawings.py index abd1f90..f00e7b5 100644 --- a/custom/drawings.py +++ b/custom/drawings.py @@ -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",