mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
202 lines
5.6 KiB
Python
202 lines
5.6 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from manimlib.imports import *
|
|
from old_projects.efvgt import get_confetti_animations
|
|
|
|
|
|
class Test(Scene):
|
|
def construct(self):
|
|
pass
|
|
|
|
class Announcements(PiCreatureScene):
|
|
def construct(self):
|
|
title = TextMobject("Announcements!")
|
|
title.scale(1.5)
|
|
title.to_edge(UP)
|
|
title.shift(LEFT)
|
|
underline = Line(LEFT, RIGHT)
|
|
underline.set_width(1.2*title.get_width())
|
|
underline.next_to(title, DOWN)
|
|
|
|
announcements = VGroup(*[
|
|
TextMobject("$\\cdot$ %s"%s)
|
|
for s in [
|
|
"Q\\&A Round 2",
|
|
"The case against Net Neutrality?",
|
|
]
|
|
])
|
|
announcements.arrange(
|
|
DOWN,
|
|
buff = LARGE_BUFF,
|
|
aligned_edge = LEFT,
|
|
)
|
|
announcements.next_to(underline, DOWN, LARGE_BUFF, aligned_edge = LEFT)
|
|
announcements.set_color_by_gradient(GREEN, YELLOW)
|
|
|
|
self.play(
|
|
Write(title),
|
|
LaggedStartMap(FadeIn, announcements),
|
|
ShowCreation(underline),
|
|
self.pi_creature.change, "hooray", underline,
|
|
)
|
|
self.play(self.pi_creature.change, "confused", announcements)
|
|
self.wait(2)
|
|
|
|
|
|
class PowersOfTwo(Scene):
|
|
def construct(self):
|
|
powers_of_2 = VGroup(*[
|
|
TexMobject("2^{%d}"%n, "=", "{:,}".format(2**n))
|
|
for n in range(20)
|
|
])
|
|
powers_of_2.to_edge(UP)
|
|
max_height = 6
|
|
center = MED_LARGE_BUFF*DOWN
|
|
|
|
mob = Dot(color = BLUE)
|
|
mob.move_to(center)
|
|
vects = it.cycle(5*[UP] + 5*[RIGHT])
|
|
curr_po2 = powers_of_2[0]
|
|
|
|
for i, vect, po2 in zip(it.count(), vects, powers_of_2[1:]):
|
|
if i == 10:
|
|
rect = SurroundingRectangle(mob, color = GREEN)
|
|
group = VGroup(mob, rect)
|
|
two_to_ten = group.copy()
|
|
group.generate_target()
|
|
group.target.set_height(0.2)
|
|
group.target[1].set_fill(BLUE, 1)
|
|
|
|
self.play(ShowCreation(rect))
|
|
self.play(MoveToTarget(group))
|
|
self.remove(group)
|
|
mob = rect
|
|
self.add(mob)
|
|
m1, m2 = mob.copy(), mob.copy()
|
|
group = VGroup(m1, m2)
|
|
group.arrange(
|
|
vect, buff = SMALL_BUFF
|
|
)
|
|
if group.get_height() > max_height:
|
|
group.set_height(max_height)
|
|
group.move_to(center)
|
|
pa = np.pi/3
|
|
self.play(
|
|
Transform(curr_po2, po2),
|
|
ReplacementTransform(mob, m1, path_arc = pa),
|
|
ReplacementTransform(mob.copy(), m2, path_arc = pa),
|
|
)
|
|
mob = VGroup(*it.chain(m1, m2))
|
|
|
|
#Show two_to_ten for comparrison
|
|
self.play(
|
|
mob.space_out_submobjects, 1.1,
|
|
mob.to_edge, RIGHT
|
|
)
|
|
two_to_ten.to_edge(LEFT)
|
|
lines = VGroup(*[
|
|
Line(
|
|
two_to_ten.get_corner(vect+RIGHT),
|
|
mob[0].get_corner(vect+LEFT),
|
|
)
|
|
for vect in (UP, DOWN)
|
|
])
|
|
two_to_ten.save_state()
|
|
two_to_ten.replace(mob[0])
|
|
self.play(
|
|
two_to_ten.restore,
|
|
*list(map(ShowCreation, lines))
|
|
)
|
|
|
|
curr_po2_outline = curr_po2[-1].copy()
|
|
curr_po2_outline.set_fill(opacity = 0)
|
|
curr_po2_outline.set_stroke(width = 2)
|
|
curr_po2_outline.set_color_by_gradient(
|
|
YELLOW, RED, PINK, PURPLE, BLUE, GREEN
|
|
)
|
|
|
|
self.play(
|
|
LaggedStartMap(
|
|
FadeIn, curr_po2_outline,
|
|
rate_func = lambda t : wiggle(t, 8),
|
|
run_time = 2,
|
|
lag_ratio = 0.75,
|
|
),
|
|
*get_confetti_animations(50)
|
|
)
|
|
|
|
class PiHoldingScreen(PiCreatureScene):
|
|
def construct(self):
|
|
morty = self.pi_creature
|
|
screen = ScreenRectangle()
|
|
screen.set_height(5.5)
|
|
screen.to_edge(UP, buff = LARGE_BUFF)
|
|
screen.to_edge(LEFT)
|
|
|
|
words = VGroup(
|
|
TextMobject("Ben Eater"),
|
|
TextMobject("The Case Against Net Neutrality?"),
|
|
)
|
|
words.next_to(screen, UP, SMALL_BUFF)
|
|
|
|
self.play(
|
|
ShowCreation(screen),
|
|
morty.change, "raise_right_hand", screen
|
|
)
|
|
self.wait(10)
|
|
self.play(
|
|
morty.change, "hooray", words[0],
|
|
Write(words[0])
|
|
)
|
|
self.wait(10)
|
|
self.play(
|
|
morty.change, "pondering", words[1],
|
|
Transform(words[0], words[1])
|
|
)
|
|
self.wait(10)
|
|
|
|
class QuestionsLink(Scene):
|
|
def construct(self):
|
|
link = TextMobject("https://3b1b.co/questions")
|
|
link.set_width(FRAME_WIDTH)
|
|
link.to_edge(DOWN)
|
|
self.play(Write(link))
|
|
self.wait()
|
|
|
|
class Thumbnail(Scene):
|
|
def construct(self):
|
|
equation = TexMobject("2^{19} = " + "{:,}".format(2**19))
|
|
equation.set_width(FRAME_X_RADIUS)
|
|
equation.to_edge(DOWN, buff = LARGE_BUFF)
|
|
|
|
q_and_a = TextMobject("Q\\&A \\\\ Round 2")
|
|
q_and_a.set_color_by_gradient(BLUE, YELLOW)
|
|
q_and_a.set_width(FRAME_X_RADIUS)
|
|
q_and_a.to_edge(UP, buff = LARGE_BUFF)
|
|
|
|
eater = ImageMobject("eater", height = 3)
|
|
eater.to_corner(UP+RIGHT, buff = 0)
|
|
|
|
confetti_anims = get_confetti_animations(100)
|
|
for anim in confetti_anims:
|
|
anim.update(0.5)
|
|
confetti = VGroup(*[a.mobject for a in confetti_anims])
|
|
|
|
self.add(equation, q_and_a, eater)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|