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]
|
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):
|
class PartyHat(SVGMobject):
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
"file_name": "party_hat",
|
"file_name": "party_hat",
|
||||||
|
|
Loading…
Add table
Reference in a new issue