mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
197 lines
4.5 KiB
Python
197 lines
4.5 KiB
Python
from helpers import *
|
|
|
|
from mobject.tex_mobject import TexMobject
|
|
from mobject import Mobject
|
|
from mobject.image_mobject import ImageMobject
|
|
from mobject.vectorized_mobject import *
|
|
|
|
from animation.animation import Animation
|
|
from animation.transform import *
|
|
from animation.simple_animations import *
|
|
from animation.playground import *
|
|
from topics.geometry import *
|
|
from topics.characters import *
|
|
from topics.functions import *
|
|
from topics.fractals import *
|
|
from topics.number_line import *
|
|
from topics.combinatorics import *
|
|
from topics.numerals import *
|
|
from topics.three_dimensions import *
|
|
from topics.objects import *
|
|
from topics.complex_numbers import *
|
|
from scene import Scene
|
|
from scene.reconfigurable_scene import ReconfigurableScene
|
|
from scene.zoomed_scene import *
|
|
from camera import Camera
|
|
from mobject.svg_mobject import *
|
|
from mobject.tex_mobject import *
|
|
|
|
# revert_to_original_skipping_status
|
|
|
|
|
|
class Introduction(PiCreatureScene):
|
|
def construct(self):
|
|
self.introduce_three_objects()
|
|
self.show_screen()
|
|
|
|
def introduce_three_objects(self):
|
|
primes = self.get_primes()
|
|
primes.to_corner(UP+RIGHT)
|
|
primes.shift(DOWN)
|
|
plane = self.get_complex_numbers()
|
|
plane.shift(2*LEFT)
|
|
pi_group = self.get_pi_group()
|
|
pi_group.next_to(primes, DOWN, buff = MED_LARGE_BUFF)
|
|
pi_group.shift_onto_screen()
|
|
|
|
morty = self.get_primary_pi_creature()
|
|
video = VideoIcon()
|
|
video.highlight(TEAL)
|
|
video.next_to(morty.get_corner(UP+LEFT), UP)
|
|
|
|
self.play(
|
|
morty.change_mode, "raise_right_hand",
|
|
DrawBorderThenFill(video)
|
|
)
|
|
self.dither()
|
|
self.play(
|
|
Write(primes, run_time = 2),
|
|
morty.change_mode, "happy",
|
|
video.scale_to_fit_height, 2*SPACE_WIDTH,
|
|
video.center,
|
|
video.set_fill, None, 0
|
|
)
|
|
self.dither()
|
|
self.play(
|
|
Write(plane, run_time = 2),
|
|
morty.change, "raise_right_hand"
|
|
)
|
|
self.dither()
|
|
self.remove(morty)
|
|
morty = morty.copy()
|
|
self.add(morty)
|
|
self.play(
|
|
ReplacementTransform(
|
|
morty.body,
|
|
pi_group.get_part_by_tex("pi"),
|
|
run_time = 1
|
|
),
|
|
FadeOut(VGroup(morty.eyes, morty.mouth)),
|
|
Write(VGroup(*pi_group[1:]))
|
|
)
|
|
self.dither(2)
|
|
self.play(
|
|
plane.scale_to_fit_width, pi_group.get_width(),
|
|
plane.next_to, pi_group, DOWN, MED_LARGE_BUFF
|
|
)
|
|
|
|
def show_screen(self):
|
|
screen = ScreenRectangle(height = 4.3)
|
|
screen.to_edge(LEFT)
|
|
titles = VGroup(
|
|
TextMobject("From zeta video"),
|
|
TextMobject("Coming up")
|
|
)
|
|
for title in titles:
|
|
title.next_to(screen, UP)
|
|
title.highlight(YELLOW)
|
|
self.play(
|
|
ShowCreation(screen),
|
|
FadeIn(titles[0])
|
|
)
|
|
self.show_frame()
|
|
self.dither(2)
|
|
self.play(Transform(*titles))
|
|
self.dither(3)
|
|
|
|
def get_primes(self):
|
|
return TexMobject("2, 3, 5, 7, 11, 13, \\dots")
|
|
|
|
def get_complex_numbers(self):
|
|
plane = ComplexPlane(
|
|
x_radius = 3,
|
|
y_radius = 2.5,
|
|
)
|
|
plane.add_coordinates()
|
|
point = plane.number_to_point(complex(1, 2))
|
|
dot = Dot(point, color = YELLOW)
|
|
label = TexMobject("1 + 2i")
|
|
label.add_background_rectangle()
|
|
label.next_to(dot, UP+RIGHT, buff = SMALL_BUFF)
|
|
label.highlight(YELLOW)
|
|
plane.label = label
|
|
plane.add(dot, label)
|
|
return plane
|
|
|
|
def get_pi_group(self):
|
|
result = TexMobject("\\pi", "=", "%.8f\\dots"%np.pi)
|
|
pi = result.get_part_by_tex("pi")
|
|
pi.scale(2, about_point = pi.get_right())
|
|
pi.highlight(MAROON_B)
|
|
return result
|
|
|
|
|
|
class ThisWontBeEasy(TeacherStudentsScene):
|
|
def construct(self):
|
|
self.say_words()
|
|
self.show_sum()
|
|
|
|
def say_words(self):
|
|
self.teacher_says("This won't be easy")
|
|
self.change_student_modes(
|
|
"hooray", "sassy", "angry"
|
|
)
|
|
self.dither(2)
|
|
self.play(RemovePiCreatureBubble(
|
|
self.teacher,
|
|
target_mode = "raise_right_hand",
|
|
))
|
|
self.change_student_modes(
|
|
*["pondering"]*3,
|
|
look_at_arg = 3*UP
|
|
)
|
|
|
|
def show_sum(self):
|
|
line = NumberLine()
|
|
line.add_numbers()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|