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