Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from manimlib.imports import *
- class ClockOrganization(VGroup):
- CONFIG = {
- "numbers" : 4,
- "radius" : 3.1,
- "color" : WHITE
- }
- def __init__(self, **kwargs):
- digest_config(self, kwargs, locals())
- self.generate_nodes()
- VGroup.__init__(self, *self.node_list,**kwargs)
- def generate_nodes(self):
- self.node_list = []
- for i in range(self.numbers):
- mobject = VMobject()
- number = TexMobject(str(i+1))
- circle = Circle(radius=0.4,color=self.color)
- mobject.add(number)
- mobject.add(circle)
- mobject.move_to(
- self.radius * np.cos((-TAU / self.numbers) * i + 17*TAU / 84) * RIGHT
- + self.radius * np.sin((-TAU / self.numbers) * i + 17*TAU / 84) * UP
- )
- self.node_list.append(mobject)
- def select_node(self, node):
- selected_node = self.node_list[node]
- selected_node.scale(1.2)
- selected_node.set_color(RED)
- def deselect_node(self, selected_node):
- node = self.node_list[selected_node]
- node.scale(0.8)
- node.set_color(self.color)
- class Testing(Scene):
- def construct(self):
- test = ClockOrganization(numbers=21)
- self.play(Write(test), run_time=1.5)
- self.wait(2)
- num_circ=25
- test.node_list[0].generate_target()
- test.node_list[0].target.scale(1.2)
- test.node_list[0].target.set_color(RED)
- test.save_state()
- self.play(MoveToTarget(test.node_list[0]))
- self.wait(2)
- anims=[Restore(test)]
- anims2=[]
- anims3=[]
- theta=180*DEGREES/num_circ
- lag_constant=1.25
- for i in range(1,25):
- test.node_list[(1+i)%test.numbers-1].generate_target()
- test.node_list[(1+i)%test.numbers-1].target.scale(1.2)
- test.node_list[(1+i)%test.numbers-1].target.set_color(RED)
- if i in range(1,13):
- stop_smooth=(lag_constant*sigmoid(-10/12.5*(i-3.46-2.6))-sigmoid(-5))/(1-2*sigmoid(-5))
- if i in range(13, num_circ+1):
- stop_smooth=(lag_constant*sigmoid(10/12.5*(i-7.5-0.812-3.46-2.2))-sigmoid(-5))/(1-2*sigmoid(-5))
- if i in range(1,num_circ):
- anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1],rate_func=there_and_back))
- else:
- anims.append(MoveToTarget(test.node_list[(1+i)%test.numbers-1]))
- anims.append(Animation(Mobject(),run_time=stop_smooth))
- self.play(
- AnimationGroup(*anims,lag_ratio=0.05,group=Group(*[anim.mobject for anim in anims]))
- )
- self.wait()
- thing = test.deepcopy()
- thing.deselect_node(4)
- self.play(Transform(test,thing))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement