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() |