mirror of
https://github.com/3b1b/manim.git
synced 2025-07-31 05:52:34 +08:00
Refactor many definitions out of topics and into folders within mobject
This commit is contained in:
67
animation/specialized.py
Normal file
67
animation/specialized.py
Normal file
@ -0,0 +1,67 @@
|
||||
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
|
||||
)
|
||||
|
Reference in New Issue
Block a user