mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
Final edits to alt_calc video. Published
This commit is contained in:
parent
c38ab7982c
commit
c8c6e6d9ba
2 changed files with 472 additions and 16 deletions
|
@ -1,3 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from big_ol_pile_of_manim_imports import *
|
||||
|
||||
|
||||
|
@ -316,7 +317,7 @@ class NumberlineTransformationScene(ZoomedScene):
|
|||
zcbr_group.add(mini_line_copy, mini_line)
|
||||
anims += [FadeIn(mini_line), FadeIn(mini_line_copy)]
|
||||
|
||||
# Add tiny coordiantes
|
||||
# Add tiny coordinates
|
||||
if local_coordinate_values is None:
|
||||
local_coordinate_values = [x]
|
||||
local_coordinates = self.get_local_coordinates(
|
||||
|
@ -660,7 +661,7 @@ class StartingCalc101(PiCreatureScene):
|
|||
circumference = TexMobject("2\\pi r")
|
||||
circumference.move_to(unfilled_circle)
|
||||
equation = TexMobject(
|
||||
"{d (\\pi r^2) \\over dx} = 2\\pi r",
|
||||
"{d (\\pi r^2) \\over dr} = 2\\pi r",
|
||||
tex_to_color_map={
|
||||
"\\pi r^2": BLUE_D,
|
||||
"2\\pi r": YELLOW,
|
||||
|
@ -875,8 +876,8 @@ class Wrapper(Scene):
|
|||
}
|
||||
|
||||
def construct(self):
|
||||
rect = ScreenRectangle(height=self.screen_height)
|
||||
title = TextMobject(self.title, **self.title_kwargs)
|
||||
rect = self.rect = ScreenRectangle(height=self.screen_height)
|
||||
title = self.title = TextMobject(self.title, **self.title_kwargs)
|
||||
title.to_edge(UP)
|
||||
rect.next_to(title, DOWN)
|
||||
|
||||
|
@ -1562,11 +1563,11 @@ class TalkThroughXSquaredExample(IntroduceTransformationView):
|
|||
la, ra = ra, la
|
||||
if factor < 0:
|
||||
kwargs = {
|
||||
"path_arc": -np.pi,
|
||||
"path_arc": np.pi,
|
||||
"use_rectangular_stem": False,
|
||||
}
|
||||
la = Arrow(DOWN, UP, **kwargs)
|
||||
ra = Arrow(UP, DOWN, **kwargs)
|
||||
la = Arrow(UP, DOWN, **kwargs)
|
||||
ra = Arrow(DOWN, UP, **kwargs)
|
||||
for arrow in la, ra:
|
||||
arrow.pointwise_become_partial(arrow, 0, 0.9)
|
||||
arrow.tip.scale(2)
|
||||
|
@ -1871,9 +1872,8 @@ class ZoomInMoreAndMoreToZero(ZoomInOnXSquaredNearZero):
|
|||
frame.scale_to_fit_height(factor * zoomed_display_height)
|
||||
self.local_coordinate_num_decimal_places = int(-np.log10(factor))
|
||||
zoom_words = TextMobject(
|
||||
"Zoomed ", "{:,}".format(int(1.0 / factor)),
|
||||
"x \\\\", "near 0",
|
||||
arg_separator=""
|
||||
"Zoomed", "{:,}x \\\\".format(int(1.0 / factor)),
|
||||
"near 0",
|
||||
)
|
||||
zoom_words.next_to(self.zoomed_display, DOWN)
|
||||
|
||||
|
@ -1954,6 +1954,14 @@ class XSquaredForNegativeInput(TalkThroughXSquaredExample):
|
|||
sample_dots.set_fill(opacity=0.8)
|
||||
|
||||
self.play(LaggedStart(DrawBorderThenFill, sample_dots))
|
||||
self.play(LaggedStart(
|
||||
ApplyFunction, sample_dots[len(sample_dots) / 2:0:-1],
|
||||
lambda mob: (
|
||||
lambda m: m.scale(2).shift(SMALL_BUFF * UP).set_color(PINK),
|
||||
mob,
|
||||
),
|
||||
rate_func=there_and_back,
|
||||
))
|
||||
self.add_sample_dot_ghosts(sample_dots)
|
||||
self.apply_function(self.func, sample_dots=sample_dots)
|
||||
self.wait()
|
||||
|
@ -3207,6 +3215,7 @@ class StabilityAndInstability(AnalyzeFunctionWithTransformations):
|
|||
CONFIG = {
|
||||
"num_initial_applications": 0,
|
||||
}
|
||||
|
||||
def construct(self):
|
||||
self.force_skipping()
|
||||
self.add_function_title()
|
||||
|
@ -3237,9 +3246,10 @@ class StabilityAndInstability(AnalyzeFunctionWithTransformations):
|
|||
self.all_arrows
|
||||
)).copy()
|
||||
arrows.set_fill(PINK, 1)
|
||||
arrows.set_stroke(PINK, 3)
|
||||
arrows.second_anim = LaggedStart(
|
||||
ApplyMethod, arrows,
|
||||
lambda m: (m.set_fill, YELLOW, 1),
|
||||
lambda m: (m.set_color, YELLOW),
|
||||
rate_func=there_and_back_with_pause,
|
||||
lag_ratio=0.7,
|
||||
run_time=2,
|
||||
|
@ -3269,11 +3279,87 @@ class StabilityAndInstability(AnalyzeFunctionWithTransformations):
|
|||
def write_derivative_fact(self):
|
||||
stable_label = self.stable_label
|
||||
unstable_label = self.unstable_label
|
||||
labels = VGroup(stable_label, unstable_label)
|
||||
phi_arrows = self.phi_arrows
|
||||
phi_bro_arrows = self.phi_bro_arrows
|
||||
arrow_groups = [phi_arrows, phi_bro_arrows]
|
||||
arrow_groups = VGroup(phi_arrows, phi_bro_arrows)
|
||||
|
||||
deriv_labels = VGroup()
|
||||
for char, label in zip("<>", labels):
|
||||
deriv_label = TexMobject(
|
||||
"\\big|", "\\frac{df}{dx}(", "x", ")", "\\big|",
|
||||
char, "1"
|
||||
)
|
||||
deriv_label.get_parts_by_tex("\\big|").match_height(
|
||||
deriv_label, stretch=True
|
||||
)
|
||||
deriv_label.set_color_by_tex("x", YELLOW, substring=False)
|
||||
deriv_label.next_to(label, UP)
|
||||
deriv_labels.add(deriv_label)
|
||||
|
||||
dot_groups = VGroup()
|
||||
for arrow_group in arrow_groups:
|
||||
dot_group = VGroup()
|
||||
for arrow in arrow_group:
|
||||
start_point, end_point = [
|
||||
line.number_to_point(line.point_to_number(p))
|
||||
for line, p in [
|
||||
(self.input_line, arrow.get_start()),
|
||||
(self.output_line, arrow.get_end()),
|
||||
]
|
||||
]
|
||||
dot = Dot(start_point, radius=0.05)
|
||||
dot.set_color(YELLOW)
|
||||
dot.generate_target()
|
||||
dot.target.move_to(end_point)
|
||||
dot_group.add(dot)
|
||||
dot_groups.add(dot_group)
|
||||
|
||||
for deriv_label, dot_group in zip(deriv_labels, dot_groups):
|
||||
self.play(FadeInFromDown(deriv_label))
|
||||
self.play(LaggedStart(GrowFromCenter, dot_group))
|
||||
self.play(*map(MoveToTarget, dot_group), run_time=2)
|
||||
self.wait()
|
||||
|
||||
|
||||
class StaticAlgebraicObject(Scene):
|
||||
def construct(self):
|
||||
frac = get_phi_continued_fraction(40)
|
||||
frac.scale_to_fit_width(FRAME_WIDTH - 1)
|
||||
# frac.shift(2 * DOWN)
|
||||
frac.to_edge(DOWN)
|
||||
frac.set_stroke(WHITE, width=0.5)
|
||||
|
||||
title = TexMobject(
|
||||
"\\infty \\ne \\lim",
|
||||
tex_to_color_map={"\\ne": RED}
|
||||
)
|
||||
title.scale(1.5)
|
||||
title.to_edge(UP)
|
||||
|
||||
polynomial = TexMobject("x^2 - x - 1 = 0")
|
||||
polynomial.move_to(title)
|
||||
|
||||
self.add(title)
|
||||
self.play(LaggedStart(
|
||||
GrowFromCenter, frac,
|
||||
lag_ratio=0.1,
|
||||
run_time=3
|
||||
))
|
||||
self.wait()
|
||||
factor = 1.1
|
||||
self.play(frac.scale, factor, run_time=0.5)
|
||||
self.play(
|
||||
frac.scale, 1 / factor,
|
||||
frac.set_color, LIGHT_GREY,
|
||||
run_time=0.5, rate_func=lambda t: t**5,
|
||||
)
|
||||
self.wait()
|
||||
self.play(
|
||||
FadeOut(title),
|
||||
FadeIn(polynomial)
|
||||
)
|
||||
self.wait(2)
|
||||
|
||||
|
||||
class NotBetterThanGraphs(TeacherStudentsScene):
|
||||
|
@ -3305,6 +3391,23 @@ class NotBetterThanGraphs(TeacherStudentsScene):
|
|||
self.wait(3)
|
||||
|
||||
|
||||
class WhatComesAfterWrapper(Wrapper):
|
||||
CONFIG = {"title": "Beyond the first year"}
|
||||
|
||||
def construct(self):
|
||||
Wrapper.construct(self)
|
||||
new_title = TextMobject("Next video")
|
||||
new_title.set_color(BLUE)
|
||||
new_title.move_to(self.title)
|
||||
|
||||
self.play(
|
||||
FadeInFromDown(new_title),
|
||||
self.title.shift, UP,
|
||||
self.title.fade, 1,
|
||||
)
|
||||
self.wait(3)
|
||||
|
||||
|
||||
class TopicsAfterSingleVariable(PiCreatureScene, MoreTopics):
|
||||
CONFIG = {
|
||||
"pi_creatures_start_on_screen": False,
|
||||
|
@ -3356,6 +3459,83 @@ class TopicsAfterSingleVariable(PiCreatureScene, MoreTopics):
|
|||
self.wait(4)
|
||||
|
||||
|
||||
class ShowJacobianZoomedIn(LinearTransformationScene, ZoomedScene):
|
||||
CONFIG = {
|
||||
"show_basis_vectors": False,
|
||||
"show_coordinates": True,
|
||||
"zoom_factor": 0.05,
|
||||
}
|
||||
|
||||
def setup(self):
|
||||
LinearTransformationScene.setup(self)
|
||||
ZoomedScene.setup(self)
|
||||
|
||||
def construct(self):
|
||||
def example_function(point):
|
||||
x, y, z = point
|
||||
return np.array([
|
||||
x + np.sin(y),
|
||||
y + np.sin(x),
|
||||
0
|
||||
])
|
||||
|
||||
zoomed_camera = self.zoomed_camera
|
||||
zoomed_display = self.zoomed_display
|
||||
frame = zoomed_camera.frame
|
||||
frame.move_to(3 * LEFT + 1 * UP)
|
||||
frame.set_color(YELLOW)
|
||||
zoomed_display.display_frame.set_color(YELLOW)
|
||||
zd_rect = BackgroundRectangle(
|
||||
zoomed_display,
|
||||
fill_opacity=1,
|
||||
buff=MED_SMALL_BUFF,
|
||||
)
|
||||
self.add_foreground_mobject(zd_rect)
|
||||
zd_rect.anim = UpdateFromFunc(
|
||||
zd_rect,
|
||||
lambda rect: rect.replace(zoomed_display).scale(1.1)
|
||||
)
|
||||
zd_rect.next_to(FRAME_HEIGHT * UP, UP)
|
||||
|
||||
tiny_grid = NumberPlane(
|
||||
x_radius=2,
|
||||
y_radius=2,
|
||||
color=BLUE_E,
|
||||
secondary_color=DARK_GREY,
|
||||
)
|
||||
tiny_grid.replace(frame)
|
||||
|
||||
jacobian_words = TextMobject("Jacobian")
|
||||
jacobian_words.add_background_rectangle()
|
||||
jacobian_words.scale(1.5)
|
||||
jacobian_words.move_to(zoomed_display, UP)
|
||||
zoomed_display.next_to(jacobian_words, DOWN)
|
||||
|
||||
self.play(self.get_zoom_in_animation())
|
||||
self.activate_zooming()
|
||||
self.play(
|
||||
self.get_zoomed_display_pop_out_animation(),
|
||||
zd_rect.anim
|
||||
)
|
||||
self.play(
|
||||
ShowCreation(tiny_grid),
|
||||
Write(jacobian_words),
|
||||
run_time=2
|
||||
)
|
||||
self.add_transformable_mobject(tiny_grid)
|
||||
self.add_foreground_mobject(jacobian_words)
|
||||
self.wait()
|
||||
self.apply_nonlinear_transformation(
|
||||
example_function,
|
||||
added_anims=[MaintainPositionRelativeTo(
|
||||
zoomed_camera.frame, tiny_grid,
|
||||
)],
|
||||
run_time=5
|
||||
)
|
||||
self.wait()
|
||||
|
||||
# Video 2
|
||||
|
||||
class ComplexAnalysisOverlay(Scene):
|
||||
def construct(self):
|
||||
words = TextMobject("Complex analysis")
|
||||
|
@ -3443,6 +3623,7 @@ class AnalyzeZSquared(ComplexTransformationScene, ZoomedScene):
|
|||
CONFIG = {
|
||||
"num_anchors_to_add_per_line": 20,
|
||||
"complex_homotopy": lambda z, t: z**(1.0 + t),
|
||||
"zoom_factor": 0.05,
|
||||
}
|
||||
|
||||
def setup(self):
|
||||
|
@ -3452,8 +3633,8 @@ class AnalyzeZSquared(ComplexTransformationScene, ZoomedScene):
|
|||
def construct(self):
|
||||
self.edit_background_plane()
|
||||
self.add_title()
|
||||
self.add_transforming_planes()
|
||||
self.preview_some_numbers()
|
||||
# self.add_transforming_planes()
|
||||
# self.preview_some_numbers()
|
||||
self.zoom_in_to_one_plus_half_i()
|
||||
self.write_derivative()
|
||||
|
||||
|
@ -3549,9 +3730,44 @@ class AnalyzeZSquared(ComplexTransformationScene, ZoomedScene):
|
|||
self.play(FadeOut(dot_groups))
|
||||
self.wait()
|
||||
self.play(FadeOut(self.plane))
|
||||
self.transformable_mobjects.remove(self.plane)
|
||||
|
||||
def zoom_in_to_one_plus_half_i(self):
|
||||
pass
|
||||
z = complex(1, 0.5)
|
||||
point = self.background.number_to_point(z)
|
||||
point_mob = VectorizedPoint(point)
|
||||
frame = self.zoomed_camera.frame
|
||||
frame.move_to(point)
|
||||
tiny_plane = NumberPlane(
|
||||
x_radius=2, y_radius=2,
|
||||
color=GREEN,
|
||||
secondary_color=GREEN_E
|
||||
)
|
||||
tiny_plane.replace(frame)
|
||||
|
||||
plane = self.get_plane()
|
||||
|
||||
words = TextMobject("What does this look like")
|
||||
words.add_background_rectangle()
|
||||
words.next_to(self.zoomed_display, LEFT, aligned_edge=UP)
|
||||
arrow = Arrow(words.get_bottom(), self.zoomed_display.get_left())
|
||||
VGroup(words, arrow).set_color(YELLOW)
|
||||
|
||||
self.play(FadeIn(plane))
|
||||
self.activate_zooming(animate=True)
|
||||
self.play(ShowCreation(tiny_plane))
|
||||
self.wait()
|
||||
self.add_transformable_mobjects(plane, tiny_plane, point_mob)
|
||||
self.add_foreground_mobjects(words, arrow)
|
||||
self.apply_complex_homotopy(
|
||||
self.complex_homotopy,
|
||||
added_anims=[
|
||||
Write(words),
|
||||
GrowArrow(arrow),
|
||||
MaintainPositionRelativeTo(frame, point_mob)
|
||||
]
|
||||
)
|
||||
self.wait(2)
|
||||
|
||||
def write_derivative(self):
|
||||
pass
|
||||
|
@ -3568,3 +3784,244 @@ class AnalyzeZSquared(ComplexTransformationScene, ZoomedScene):
|
|||
top_plane.next_to(ORIGIN, UP, buff=tiny_tiny_buff)
|
||||
bottom_plane.next_to(ORIGIN, DOWN, buff=tiny_tiny_buff)
|
||||
return VGroup(top_plane, bottom_plane)
|
||||
|
||||
|
||||
class PrinciplesOverlay(PiCreatureScene):
|
||||
CONFIG = {
|
||||
"default_pi_creature_kwargs": {
|
||||
"color": GREY_BROWN,
|
||||
"flip_at_start": True,
|
||||
},
|
||||
"default_pi_creature_start_corner": DR,
|
||||
}
|
||||
|
||||
def construct(self):
|
||||
morty = self.pi_creature
|
||||
q_marks = VGroup(*[TexMobject("?") for x in range(40)])
|
||||
q_marks.arrange_submobjects_in_grid(4, 10)
|
||||
q_marks.space_out_submobjects(1.4)
|
||||
for mark in q_marks:
|
||||
mark.shift(
|
||||
random.random() * RIGHT,
|
||||
random.random() * UP,
|
||||
)
|
||||
mark.scale(1.5)
|
||||
mark.set_stroke(BLACK, 1)
|
||||
q_marks.next_to(morty, UP)
|
||||
q_marks.shift_onto_screen()
|
||||
q_marks.sort_submobjects(
|
||||
lambda p: np.linalg.norm(p - morty.get_top())
|
||||
)
|
||||
|
||||
self.play(morty.change, "pondering")
|
||||
self.wait(2)
|
||||
self.play(morty.change, "raise_right_hand")
|
||||
self.wait()
|
||||
self.play(morty.change, "thinking")
|
||||
self.wait(4)
|
||||
self.play(FadeInFromDown(q_marks[0]))
|
||||
self.wait(2)
|
||||
self.play(LaggedStart(
|
||||
FadeInFromDown, q_marks[1:],
|
||||
run_time=3
|
||||
))
|
||||
self.wait(3)
|
||||
|
||||
|
||||
class ManyInfiniteExpressions(Scene):
|
||||
def construct(self):
|
||||
frac = get_phi_continued_fraction(10)
|
||||
frac.scale_to_fit_height(2)
|
||||
frac.to_corner(UL)
|
||||
|
||||
n = 9
|
||||
radical_str_parts = [
|
||||
"%d + \\sqrt{" % d
|
||||
for d in range(1, n + 1)
|
||||
]
|
||||
radical_str_parts += ["\\cdots"]
|
||||
radical_str_parts += ["}"] * n
|
||||
radical = TexMobject("".join(radical_str_parts))
|
||||
radical.to_corner(UR)
|
||||
radical.to_edge(DOWN)
|
||||
radical.set_color_by_gradient(YELLOW, RED)
|
||||
|
||||
n = 12
|
||||
power_tower = TexMobject(
|
||||
*["\\sqrt{2}^{"] * n + ["\\dots"] + ["}"] * n
|
||||
)
|
||||
power_tower.to_corner(UR)
|
||||
power_tower.set_color_by_gradient(BLUE, GREEN)
|
||||
|
||||
self.play(*[
|
||||
LaggedStart(
|
||||
GrowFromCenter, group,
|
||||
lag_ratio=0.1,
|
||||
run_time=8,
|
||||
)
|
||||
for group in frac, radical, power_tower
|
||||
])
|
||||
self.wait(2)
|
||||
|
||||
|
||||
class HoldUpPromo(PrinciplesOverlay):
|
||||
def construct(self):
|
||||
morty = self.pi_creature
|
||||
|
||||
url = TextMobject("https://brilliant.org/3b1b/")
|
||||
url.to_corner(UL)
|
||||
|
||||
rect = ScreenRectangle(height=5.5)
|
||||
rect.next_to(url, DOWN)
|
||||
rect.to_edge(LEFT)
|
||||
|
||||
self.play(
|
||||
Write(url),
|
||||
self.pi_creature.change, "raise_right_hand"
|
||||
)
|
||||
self.play(ShowCreation(rect))
|
||||
self.wait(2)
|
||||
self.change_mode("thinking")
|
||||
self.wait()
|
||||
self.look_at(url)
|
||||
self.wait(10)
|
||||
self.change_mode("happy")
|
||||
self.wait(10)
|
||||
self.change_mode("raise_right_hand")
|
||||
self.wait(10)
|
||||
|
||||
self.play(FadeOut(rect), FadeOut(url))
|
||||
self.play(morty.change, "raise_right_hand")
|
||||
self.wait()
|
||||
self.play(morty.change, "hooray")
|
||||
self.wait(3)
|
||||
|
||||
|
||||
class EndScreen(PatreonEndScreen):
|
||||
CONFIG = {
|
||||
"specific_patrons": [
|
||||
"Juan Benet",
|
||||
"Keith Smith",
|
||||
"Chloe Zhou",
|
||||
"Desmos",
|
||||
"Burt Humburg",
|
||||
"CrypticSwarm",
|
||||
"Andrew Sachs",
|
||||
"Ho\\`ang T\\`ung L\\^am",
|
||||
# "Hoàng Tùng Lâm",
|
||||
"Devin Scott",
|
||||
"Akash Kumar",
|
||||
"Felix Tripier",
|
||||
"Arthur Zey",
|
||||
"David Kedmey",
|
||||
"Ali Yahya",
|
||||
"Mayank M. Mehrotra",
|
||||
"Lukas Biewald",
|
||||
"Yana Chernobilsky",
|
||||
"Kaustuv DeBiswas",
|
||||
"Yu Jun",
|
||||
"dave nicponski",
|
||||
"Damion Kistler",
|
||||
"Jordan Scales",
|
||||
"Markus Persson",
|
||||
"Fela",
|
||||
"Fred Ehrsam",
|
||||
"Britt Selvitelle",
|
||||
"Jonathan Wilson",
|
||||
"Ryan Atallah",
|
||||
"Joseph John Cox",
|
||||
"Luc Ritchie",
|
||||
"Matt Roveto",
|
||||
"Jamie Warner",
|
||||
"Marek Cirkos",
|
||||
"Magister Mugit",
|
||||
"Stevie Metke",
|
||||
"Cooper Jones",
|
||||
"James Hughes",
|
||||
"John V Wertheim",
|
||||
"Chris Giddings",
|
||||
"Song Gao",
|
||||
"Alexander Feldman",
|
||||
"Matt Langford",
|
||||
"Max Mitchell",
|
||||
"Richard Burgmann",
|
||||
"John Griffith",
|
||||
"Chris Connett",
|
||||
"Steven Tomlinson",
|
||||
"Jameel Syed",
|
||||
"Bong Choung",
|
||||
"Ignacio Freiberg",
|
||||
"Zhilong Yang",
|
||||
"Giovanni Filippi",
|
||||
"Eric Younge",
|
||||
"Prasant Jagannath",
|
||||
"Cody Brocious",
|
||||
"James H. Park",
|
||||
"Norton Wang",
|
||||
"Kevin Le",
|
||||
"Tianyu Ge",
|
||||
"David MacCumber",
|
||||
"Oliver Steele",
|
||||
"Yaw Etse",
|
||||
"Dave B",
|
||||
"Waleed Hamied",
|
||||
"George Chiesa",
|
||||
"supershabam",
|
||||
"Delton Ding",
|
||||
"Thomas Tarler",
|
||||
"Isak Hietala",
|
||||
"1st ViewMaths",
|
||||
"Jacob Magnuson",
|
||||
"Mark Govea",
|
||||
"Clark Gaebel",
|
||||
"Mathias Jansson",
|
||||
"David Clark",
|
||||
"Michael Gardner",
|
||||
"Mads Elvheim",
|
||||
"Awoo",
|
||||
"Dr . David G. Stork",
|
||||
"Ted Suzman",
|
||||
"Linh Tran",
|
||||
"Andrew Busey",
|
||||
"John Haley",
|
||||
"Ankalagon",
|
||||
"Eric Lavault",
|
||||
"Boris Veselinovich",
|
||||
"Julian Pulgarin",
|
||||
"Jeff Linse",
|
||||
"Robert Teed",
|
||||
"Jason Hise",
|
||||
"Meshal Alshammari",
|
||||
"Bernd Sing",
|
||||
"James Thornton",
|
||||
"Mustafa Mahdi",
|
||||
"Mathew Bramson",
|
||||
"Jerry Ling",
|
||||
"Sh\\`im\\'in Ku\\=ang",
|
||||
"Rish Kundalia",
|
||||
"Achille Brighton",
|
||||
"Ripta Pasay",
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
# class Thumbnail(GraphicalIntuitions):
|
||||
class Thumbnail(AnalyzeFunctionWithTransformations):
|
||||
CONFIG = {
|
||||
"x_axis_width": 12,
|
||||
"graph_origin": 1.5 * DOWN + 4 * LEFT,
|
||||
"num_initial_applications": 1,
|
||||
"input_line_zero_point": 2 * UP,
|
||||
}
|
||||
|
||||
def construct(self):
|
||||
self.add_function_title()
|
||||
self.title.fade(1)
|
||||
self.titles.fade(1)
|
||||
self.repeatedly_apply_function()
|
||||
|
||||
full_rect = FullScreenFadeRectangle()
|
||||
cross = Cross(full_rect)
|
||||
cross.set_stroke(width=40)
|
||||
|
||||
self.add(cross)
|
||||
|
|
|
@ -3274,6 +3274,5 @@ class Thumbnail(SearchSpacePerimeterVsArea):
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue