View difference between Paste ID: jTeP6vGd and G9w8Xyga
SHOW: | | - or go back to the newest paste.
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):
39+
class Testing4(Scene):
40
  def construct(self):
41
    test = ClockOrganization(numbers=21)
42
    self.play(Write(test), run_time=1.5)
43
    animation_steps=[]
44-
    num_circ=25
44+
    #animation_steps.append(test)
45-
    test.node_list[0].generate_target()
45+
    num_circ=15
46-
    test.node_list[0].target.scale(1.2)
46+
    for i in range(num_circ):
47-
    test.node_list[0].target.set_color(RED)
47+
      thing = test.deepcopy()
48
      thing.select_node((1+i)%test.numbers-1)
49-
    self.play(MoveToTarget(test.node_list[0]))
49+
      animation_steps.append(thing)
50
    test_normal=test.copy()
51
    test.save_state()
52-
    anims2=[]
52+
    self.play(Transform(test, animation_steps[0]))
53-
    anims3=[]
53+
54
    anims=[Restore(test)]
55
    theta=180*DEGREES/num_circ
56-
    for i in range(1,25):
56+
57-
      test.node_list[(1+i)%test.numbers-1].generate_target()
57+
    for i in range(1,num_circ+1):
58-
      test.node_list[(1+i)%test.numbers-1].target.scale(1.2)
58+
        test.node_list[(1+i)%test.numbers-1].generate_target()
59-
      test.node_list[(1+i)%test.numbers-1].target.set_color(RED)
59+
        test.node_list[(1+i)%test.numbers-1].target.scale(1.2)
60-
      if i in range(1,13):
60+
        test.node_list[(1+i)%test.numbers-1].target.set_color(RED)
61-
        stop_smooth=(lag_constant*sigmoid(-10/12.5*(i-3.46-2.6))-sigmoid(-5))/(1-2*sigmoid(-5))
61+
        if i in range(1,8):
62-
      if i in range(13, num_circ+1):
62+
          stop_smooth=(lag_constant*sigmoid(-10/7.5*(i-3.46))-sigmoid(-5))/(1-2*sigmoid(-5))
63-
        stop_smooth=(lag_constant*sigmoid(10/12.5*(i-7.5-0.812-3.46-2.2))-sigmoid(-5))/(1-2*sigmoid(-5))
63+
        else:
64-
      if i in range(1,num_circ):
64+
          stop_smooth=(lag_constant*sigmoid(10/7.5*(i-7.5-0.812-3.46))-sigmoid(-5))/(1-2*sigmoid(-5))
65-
         anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1],rate_func=there_and_back))
65+
        if i in range(1,num_circ):
66-
      else:
66+
          anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1],rate_func=there_and_back))
67-
        anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1]))
67+
        else:
68-
      anims.append(Animation(Mobject(),run_time=stop_smooth))
68+
          anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1]))
69
        anims.append(Animation(Mobject(),run_time=stop_smooth))
70-
        AnimationGroup(*anims,lag_ratio=0.05,group=Group(*[anim.mobject for anim in anims]))
70+
71
        AnimationGroup(*anims,lag_ratio=0.05)
72-
    self.wait()
72+
73-
    thing = test.deepcopy()
73+
    self.wait()