mirror of
https://github.com/3b1b/manim.git
synced 2025-09-19 04:41:56 +00:00
Finished eoc7
This commit is contained in:
parent
7452486ddf
commit
983e205b3e
2 changed files with 191 additions and 23 deletions
|
@ -356,6 +356,9 @@ class Succession(Animation):
|
|||
self.last_index = index
|
||||
|
||||
class AnimationGroup(Animation):
|
||||
CONFIG = {
|
||||
"rate_func" : None
|
||||
}
|
||||
def __init__(self, *sub_anims, **kwargs):
|
||||
digest_config(self, kwargs, locals())
|
||||
sync_animation_run_times_and_rate_funcs(*sub_anims, **kwargs)
|
||||
|
@ -363,7 +366,7 @@ class AnimationGroup(Animation):
|
|||
everything = Mobject(*[a.mobject for a in sub_anims])
|
||||
Animation.__init__(self, everything, **kwargs)
|
||||
|
||||
def update(self, alpha):
|
||||
def update_mobject(self, alpha):
|
||||
for anim in self.sub_anims:
|
||||
anim.update(alpha)
|
||||
|
||||
|
|
209
eoc/chapter7.py
209
eoc/chapter7.py
|
@ -88,22 +88,21 @@ class ThisVideo(TeacherStudentsScene):
|
|||
tex_mob = tex_mobs[index]
|
||||
self.play(ApplyWave(
|
||||
videos,
|
||||
apply_function_kwargs = {"maintain_smoothness" : False}
|
||||
direction = DOWN,
|
||||
))
|
||||
self.play(
|
||||
GrowFromCenter(brace),
|
||||
Write(tex_mob, run_time = 2)
|
||||
)
|
||||
self.dither()
|
||||
self.play(self.get_teacher().change_mode, "raise_right_hand")
|
||||
self.play(
|
||||
this_video.highlight, YELLOW,
|
||||
GrowFromCenter(this_brace)
|
||||
GrowFromCenter(this_brace),
|
||||
self.get_teacher().change_mode, "raise_right_hand",
|
||||
self.get_teacher().look_at, this_video
|
||||
)
|
||||
self.play(Write(this_tex))
|
||||
self.dither()
|
||||
self.play(ShowCreation(lim_to_deriv_arrow))
|
||||
self.change_student_modes(*["happy"]*3)
|
||||
self.dither(2)
|
||||
self.play(self.get_teacher().change_mode, "sassy")
|
||||
self.dither(2)
|
||||
|
||||
class LimitJustMeansApproach(PiCreatureScene):
|
||||
|
@ -764,6 +763,30 @@ class OtherViewsOfDx(TeacherStudentsScene):
|
|||
)
|
||||
self.dither(3)
|
||||
|
||||
class GoalsListed(Scene):
|
||||
def construct(self):
|
||||
goals = VGroup(*[
|
||||
TextMobject("Goal %d: %s"%(d, s))
|
||||
for d, s in zip(it.count(1), [
|
||||
"Formal definition of a derivative",
|
||||
"$(\\epsilon, \\delta)$ definition of limits",
|
||||
"L'Hôpital's rule",
|
||||
])
|
||||
])
|
||||
goals.arrange_submobjects(
|
||||
DOWN, buff = LARGE_BUFF, aligned_edge = LEFT
|
||||
)
|
||||
|
||||
for goal in goals:
|
||||
self.play(FadeIn(goal))
|
||||
self.dither()
|
||||
for i, goal in enumerate(goals):
|
||||
anims = [goal.highlight, YELLOW]
|
||||
if i > 0:
|
||||
anims += [goals[i-1].highlight, WHITE]
|
||||
self.play(*anims)
|
||||
self.dither()
|
||||
|
||||
class GraphLimitExpression(GraphScene):
|
||||
CONFIG = {
|
||||
"start_x" : 2,
|
||||
|
@ -821,18 +844,29 @@ class GraphLimitExpression(GraphScene):
|
|||
brace = Brace(VGroup(limit, expression.target))
|
||||
derivative.next_to(brace, DOWN)
|
||||
|
||||
graph = self.get_graph(self.func, color = BLUE)
|
||||
|
||||
|
||||
indices = [0, 6, 11, 13]
|
||||
for i, j in zip(indices, indices[1:]):
|
||||
group = VGroup(*expression[i:j])
|
||||
self.play(FadeIn(
|
||||
group,
|
||||
funcs = [
|
||||
lambda h : (2+h)**3,
|
||||
lambda h : (2+h)**3 - 2**3,
|
||||
self.func
|
||||
]
|
||||
graph = None
|
||||
for i, j, func in zip(indices, indices[1:], funcs):
|
||||
anims = [FadeIn(
|
||||
VGroup(*expression[i:j]),
|
||||
submobject_mode = "lagged_start",
|
||||
lag_factor = 1.5
|
||||
))
|
||||
)]
|
||||
new_graph = self.get_graph(func, color = BLUE)
|
||||
if graph is None:
|
||||
graph = new_graph
|
||||
anims.append(FadeIn(graph))
|
||||
else:
|
||||
anims.append(Transform(graph, new_graph))
|
||||
self.play(*anims)
|
||||
self.dither()
|
||||
self.play(ShowCreation(graph))
|
||||
self.dither()
|
||||
self.play(
|
||||
MoveToTarget(expression),
|
||||
|
@ -1758,6 +1792,7 @@ class TheoryHeavy(TeacherStudentsScene):
|
|||
for pi in self.get_pi_creatures()
|
||||
]
|
||||
)
|
||||
student.bubble = None
|
||||
part_tex_pairs = [
|
||||
("df", "f"),
|
||||
("over", "+"),
|
||||
|
@ -2445,7 +2480,7 @@ class DerivativeLimitReciprocity(Scene):
|
|||
|
||||
class GeneralLHoptial(LHopitalExample):
|
||||
CONFIG = {
|
||||
"f_color" : GREEN,
|
||||
"f_color" : BLUE,
|
||||
"g_color" : YELLOW,
|
||||
"a_value" : 2.5,
|
||||
"zoomed_rect_center_coords" : (2.55, 0),
|
||||
|
@ -2792,13 +2827,143 @@ class GeneralLHoptial(LHopitalExample):
|
|||
|
||||
return result
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class CannotUseLHopital(TeacherStudentsScene):
|
||||
def construct(self):
|
||||
deriv = TexMobject(
|
||||
"{d(e^x)", "\\over \\,", "dx}", "(", "x", ")", "=",
|
||||
"\\lim", "_{h", "\\to 0}",
|
||||
"{e^{", "x", "+", "h}",
|
||||
"-", "e^", "x",
|
||||
"\\over \\,", "h}"
|
||||
)
|
||||
deriv.to_edge(UP)
|
||||
deriv.highlight_by_tex("x", RED)
|
||||
deriv.highlight_by_tex("dx", GREEN)
|
||||
deriv.highlight_by_tex("h", GREEN)
|
||||
deriv.highlight_by_tex("e^", YELLOW)
|
||||
|
||||
self.play(
|
||||
Write(deriv),
|
||||
*it.chain(*[
|
||||
[pi.change_mode, "pondering", pi.look_at, deriv]
|
||||
for pi in self.get_pi_creatures()
|
||||
])
|
||||
)
|
||||
self.dither()
|
||||
self.student_says(
|
||||
"Use L'Hôpital's rule!",
|
||||
target_mode = "hooray"
|
||||
)
|
||||
self.dither()
|
||||
answer = TexMobject(
|
||||
"\\text{That requires knowing }",
|
||||
"{d(e^x)", "\\over \\,", "dx}"
|
||||
)
|
||||
answer.highlight_by_tex("e^", YELLOW)
|
||||
answer.highlight_by_tex("dx", GREEN)
|
||||
self.teacher_says(
|
||||
answer,
|
||||
bubble_kwargs = {"height" : 2.5},
|
||||
target_mode = "hesitant"
|
||||
)
|
||||
self.change_student_modes(*["confused"]*3)
|
||||
self.dither(3)
|
||||
|
||||
class NextVideo(TeacherStudentsScene):
|
||||
def construct(self):
|
||||
series = VideoSeries()
|
||||
series.to_edge(UP)
|
||||
next_video = series[7]
|
||||
brace = Brace(next_video, DOWN)
|
||||
|
||||
integral = TexMobject("\\int", "f(x)", "dx")
|
||||
ftc = TexMobject(
|
||||
"F(b)", "-", "F(a)", "=", "\\int_a^b",
|
||||
"{dF", "\\over \\,", "dx}", "(x)", "dx"
|
||||
)
|
||||
for tex_mob in integral, ftc:
|
||||
tex_mob.highlight_by_tex("dx", GREEN)
|
||||
tex_mob.highlight_by_tex("f", YELLOW)
|
||||
tex_mob.highlight_by_tex("F", YELLOW)
|
||||
tex_mob.next_to(brace, DOWN)
|
||||
|
||||
self.add(series)
|
||||
self.play(
|
||||
GrowFromCenter(brace),
|
||||
next_video.highlight, YELLOW,
|
||||
self.get_teacher().change_mode, "raise_right_hand",
|
||||
self.get_teacher().look_at, next_video
|
||||
)
|
||||
self.play(Write(integral))
|
||||
self.dither(2)
|
||||
self.play(*[
|
||||
ReplacementTransform(
|
||||
VGroup(*integral.get_parts_by_tex(p1)),
|
||||
VGroup(*ftc.get_parts_by_tex(p2)),
|
||||
run_time = 2,
|
||||
path_arc = np.pi/2,
|
||||
rate_func = squish_rate_func(smooth, alpha, alpha+0.5)
|
||||
)
|
||||
for alpha, (p1, p2) in zip(np.linspace(0, 0.5, 3), [
|
||||
("int", "int"),
|
||||
("f", "F"),
|
||||
("dx", "dx"),
|
||||
])
|
||||
]+[
|
||||
Write(VGroup(*ftc.get_parts_by_tex(part)))
|
||||
for part in "-", "=", "over", "(x)"
|
||||
])
|
||||
self.change_student_modes(*["pondering"]*3)
|
||||
self.dither(3)
|
||||
|
||||
class Chapter7PatreonThanks(PatreonThanks):
|
||||
CONFIG = {
|
||||
"specific_patrons" : [
|
||||
"Ali Yahya",
|
||||
"Meshal Alshammari",
|
||||
"CrypticSwarm ",
|
||||
"Kaustuv DeBiswas",
|
||||
"Kathryn Schmiedicke",
|
||||
"Nathan Pellegrin",
|
||||
"Karan Bhargava",
|
||||
"Justin Helps",
|
||||
"Ankit Agarwal",
|
||||
"Yu Jun",
|
||||
"Dave Nicponski",
|
||||
"Damion Kistler",
|
||||
"Juan Benet",
|
||||
"Othman Alikhan",
|
||||
"Justin Helps",
|
||||
"Markus Persson",
|
||||
"Dan Buchoff",
|
||||
"Derek Dai",
|
||||
"Joseph John Cox",
|
||||
"Luc Ritchie",
|
||||
"Mustafa Mahdi",
|
||||
"Daan Smedinga",
|
||||
"Jonathan Eppele",
|
||||
"Albert Nguyen",
|
||||
"Nils Schneider",
|
||||
"Mustafa Mahdi",
|
||||
"Mathew Bramson",
|
||||
"Guido Gambardella",
|
||||
"Jerry Ling",
|
||||
"Mark Govea",
|
||||
"Vecht",
|
||||
"Shimin Kuang",
|
||||
"Rish Kundalia",
|
||||
"Achille Brighton",
|
||||
"Ripta Pasay",
|
||||
"Felipe Diniz",
|
||||
]
|
||||
}
|
||||
|
||||
class Thumbnail(Scene):
|
||||
def construct(self):
|
||||
lim = TexMobject("\\lim", "_{h", "\\to 0}")
|
||||
lim.highlight_by_tex("h", GREEN)
|
||||
lim.scale_to_fit_height(5)
|
||||
self.add(lim)
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue