Advertisement
epicycloids

Animate Clock

May 26th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.52 KB | None | 0 0
  1. from manimlib.imports import *
  2.  
  3. class ClockOrganization(VGroup):
  4.   CONFIG = {
  5.     "numbers" : 4,
  6.     "radius" : 3.1,
  7.     "color" : WHITE
  8.   }
  9.  
  10.   def __init__(self, **kwargs):
  11.     digest_config(self, kwargs, locals())
  12.     self.generate_nodes()
  13.     VGroup.__init__(self, *self.node_list,**kwargs)
  14.    
  15.   def generate_nodes(self):
  16.     self.node_list = []
  17.     for i in range(self.numbers):
  18.       mobject = VMobject()
  19.       number = TexMobject(str(i+1))
  20.       circle = Circle(radius=0.4,color=self.color)
  21.       mobject.add(number)
  22.       mobject.add(circle)
  23.       mobject.move_to(
  24.         self.radius * np.cos((-TAU / self.numbers) * i + 17*TAU / 84) * RIGHT
  25.         + self.radius * np.sin((-TAU / self.numbers) * i + 17*TAU / 84) * UP
  26.       )
  27.       self.node_list.append(mobject)
  28.  
  29.   def select_node(self, node):
  30.     selected_node = self.node_list[node]
  31.     selected_node.scale(1.2)
  32.     selected_node.set_color(RED)
  33.    
  34.   def deselect_node(self, selected_node):
  35.     node = self.node_list[selected_node]
  36.     node.scale(0.8)
  37.     node.set_color(self.color)
  38.  
  39. class Testing(Scene):
  40.   def construct(self):
  41.     test = ClockOrganization(numbers=21)
  42.     self.play(Write(test), run_time=1.5)
  43.     self.wait(2)
  44.     num_circ=25
  45.     test.node_list[0].generate_target()
  46.     test.node_list[0].target.scale(1.2)
  47.     test.node_list[0].target.set_color(RED)
  48.     test.save_state()
  49.     self.play(MoveToTarget(test.node_list[0]))
  50.     self.wait(2)
  51.     anims=[Restore(test)]
  52.     anims2=[]
  53.     anims3=[]
  54.     theta=180*DEGREES/num_circ
  55.     lag_constant=1.25
  56.     for i in range(1,25):
  57.       test.node_list[(1+i)%test.numbers-1].generate_target()
  58.       test.node_list[(1+i)%test.numbers-1].target.scale(1.2)
  59.       test.node_list[(1+i)%test.numbers-1].target.set_color(RED)
  60.       if i in range(1,13):
  61.         stop_smooth=(lag_constant*sigmoid(-10/12.5*(i-3.46-2.6))-sigmoid(-5))/(1-2*sigmoid(-5))
  62.       if i in range(13, num_circ+1):
  63.         stop_smooth=(lag_constant*sigmoid(10/12.5*(i-7.5-0.812-3.46-2.2))-sigmoid(-5))/(1-2*sigmoid(-5))
  64.       if i in range(1,num_circ):
  65.          anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1],rate_func=there_and_back))
  66.       else:
  67.         anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1]))
  68.       anims.append(Animation(Mobject(),run_time=stop_smooth))
  69.     self.play(
  70.         AnimationGroup(*anims,lag_ratio=0.05,group=Group(*[anim.mobject for anim in anims]))
  71.         )
  72.     self.wait()
  73.     thing = test.deepcopy()
  74.     thing.deselect_node(4)
  75.     self.play(Transform(test,thing))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement