mirror of
https://github.com/3b1b/manim.git
synced 2025-09-01 00:48:45 +00:00
Animations up to formal definition of Hilbert Curve
This commit is contained in:
parent
69be4328ce
commit
ca1ea90402
1 changed files with 114 additions and 7 deletions
|
@ -802,15 +802,16 @@ class WonderfulPropertyOfPseudoHilbertCurves(Scene):
|
||||||
val = 0.3
|
val = 0.3
|
||||||
text = TextMobject([
|
text = TextMobject([
|
||||||
"PHC", "$_n", "(", "%3.1f"%val, ")$",
|
"PHC", "$_n", "(", "%3.1f"%val, ")$",
|
||||||
" has a limit point $n \\to \\infty$"
|
" has a ", "limit point ", "as $n \\to \\infty$"
|
||||||
])
|
])
|
||||||
func_parts = text.split()[:5]
|
func_parts = text.copy().split()[:5]
|
||||||
Mobject(*func_parts).center().to_edge(UP)
|
Mobject(*func_parts).center().to_edge(UP)
|
||||||
num_str, val_str = func_parts[1], func_parts[3]
|
num_str, val_str = func_parts[1], func_parts[3]
|
||||||
curve = UnitInterval()
|
curve = UnitInterval()
|
||||||
curve.sort_points(lambda p : p[0])
|
curve.sort_points(lambda p : p[0])
|
||||||
dot = Dot().shift(curve.number_to_point(val))
|
dot = Dot().shift(curve.number_to_point(val))
|
||||||
arrow = Arrow(val_str, dot, buff = 0.1)
|
arrow = Arrow(val_str, dot, buff = 0.1)
|
||||||
|
curve.add_numbers(0, 1)
|
||||||
|
|
||||||
self.play(ShowCreation(curve))
|
self.play(ShowCreation(curve))
|
||||||
self.play(
|
self.play(
|
||||||
|
@ -826,7 +827,7 @@ class WonderfulPropertyOfPseudoHilbertCurves(Scene):
|
||||||
for i in 0, 1, 2, 4
|
for i in 0, 1, 2, 4
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
for num in range(2,7):
|
for num in range(2,9):
|
||||||
new_curve = HilbertCurve(order = num)
|
new_curve = HilbertCurve(order = num)
|
||||||
new_curve.scale(0.8)
|
new_curve.scale(0.8)
|
||||||
new_dot = Dot(new_curve.points[int(val*new_curve.get_num_points())])
|
new_dot = Dot(new_curve.points[int(val*new_curve.get_num_points())])
|
||||||
|
@ -838,12 +839,118 @@ class WonderfulPropertyOfPseudoHilbertCurves(Scene):
|
||||||
)
|
)
|
||||||
self.dither()
|
self.dither()
|
||||||
|
|
||||||
|
text.to_edge(UP)
|
||||||
|
text_parts = text.split()
|
||||||
|
for index in 1, -1:
|
||||||
|
text_parts[index].highlight()
|
||||||
|
starters = Mobject(*func_parts + [
|
||||||
|
Point(mob.get_center(), point_thickness=1)
|
||||||
|
for mob in text_parts[5:]
|
||||||
|
])
|
||||||
|
self.play(Transform(starters, text))
|
||||||
|
arrow = Arrow(text_parts[-2].get_bottom(), dot, buff = 0.1)
|
||||||
|
self.play(ShowCreation(arrow))
|
||||||
|
self.dither()
|
||||||
|
|
||||||
|
class FollowManyPoints(Scene):
|
||||||
|
def construct(self):
|
||||||
|
text = TextMobject([
|
||||||
|
"PHC", "_n", "(", "x", ")$",
|
||||||
|
" has a limit point ", "as $n \\to \\infty$",
|
||||||
|
"\\\\ for all $x$"
|
||||||
|
])
|
||||||
|
parts = text.split()
|
||||||
|
parts[-1].next_to(Mobject(*parts[:-1]), DOWN)
|
||||||
|
parts[-1].highlight(BLUE)
|
||||||
|
parts[3].highlight(BLUE)
|
||||||
|
parts[1].highlight()
|
||||||
|
parts[-2].highlight()
|
||||||
|
text.to_edge(UP)
|
||||||
|
curve = UnitInterval()
|
||||||
|
curve.sort_points(lambda p : p[0])
|
||||||
|
vals = np.arange(0.1, 1, 0.1)
|
||||||
|
dots = Mobject(*[
|
||||||
|
Dot(curve.number_to_point(val))
|
||||||
|
for val in vals
|
||||||
|
])
|
||||||
|
curve.add_numbers(0, 1)
|
||||||
|
starter_dots = dots.copy().ingest_sub_mobjects()
|
||||||
|
starter_dots.shift(2*UP)
|
||||||
|
|
||||||
|
self.add(curve, text)
|
||||||
|
self.dither()
|
||||||
|
self.play(DelayByOrder(ApplyMethod(starter_dots.shift, 2*DOWN)))
|
||||||
|
self.dither()
|
||||||
|
self.remove(starter_dots)
|
||||||
|
self.add(dots)
|
||||||
|
for num in range(1, 10):
|
||||||
|
new_curve = HilbertCurve(order = num)
|
||||||
|
new_curve.scale(0.8)
|
||||||
|
new_dots = Mobject(*[
|
||||||
|
Dot(new_curve.points[int(val*new_curve.get_num_points())])
|
||||||
|
for val in vals
|
||||||
|
])
|
||||||
|
self.play(
|
||||||
|
Transform(curve, new_curve),
|
||||||
|
Transform(dots, new_dots),
|
||||||
|
)
|
||||||
|
# self.dither()
|
||||||
|
|
||||||
|
|
||||||
|
class FormalDefinitionOfHilbertCurve(Scene):
|
||||||
|
def construct(self):
|
||||||
|
val = 0.7
|
||||||
|
text = TexMobject([
|
||||||
|
"\\text{HC}(", "x", ")",
|
||||||
|
"=\\lim_{n \\to \\infty}\\text{PHC}_n(", "x", ")"
|
||||||
|
])
|
||||||
|
text.to_edge(UP)
|
||||||
|
x1 = text.split()[1]
|
||||||
|
x2 = text.split()[-2]
|
||||||
|
x2.highlight(BLUE)
|
||||||
|
explanation = TextMobject("Actual Hilbert curve function")
|
||||||
|
exp_arrow = Arrow(explanation, text.split()[0])
|
||||||
|
curve = UnitInterval()
|
||||||
|
dot = Dot(curve.number_to_point(val))
|
||||||
|
x_arrow = Arrow(x1.get_bottom(), dot, buff = 0)
|
||||||
|
curve.sort_points(lambda p : p[0])
|
||||||
|
curve.add_numbers(0, 1)
|
||||||
|
|
||||||
|
self.add(*text.split()[:3])
|
||||||
|
self.play(
|
||||||
|
ShimmerIn(explanation),
|
||||||
|
ShowCreation(exp_arrow)
|
||||||
|
)
|
||||||
|
self.dither()
|
||||||
|
self.remove(explanation, exp_arrow)
|
||||||
|
self.play(ShowCreation(curve))
|
||||||
|
self.play(
|
||||||
|
ApplyMethod(x1.highlight, BLUE),
|
||||||
|
ShowCreation(x_arrow),
|
||||||
|
ShowCreation(dot)
|
||||||
|
)
|
||||||
|
self.dither()
|
||||||
|
self.remove(x_arrow)
|
||||||
|
limit = Mobject(*text.split()[3:]).ingest_sub_mobjects()
|
||||||
|
limit.point_thickness = 1
|
||||||
|
self.play(ShimmerIn(limit))
|
||||||
|
for num in range(1, 9):
|
||||||
|
new_curve = HilbertCurve(order = num)
|
||||||
|
new_curve.scale(0.8)
|
||||||
|
new_dot = Dot(new_curve.points[int(val*new_curve.get_num_points())])
|
||||||
|
self.play(
|
||||||
|
Transform(curve, new_curve),
|
||||||
|
Transform(dot, new_dot),
|
||||||
|
)
|
||||||
|
|
||||||
|
class ThreeThingsToProve(Scene):
|
||||||
|
def construct(self):
|
||||||
|
intro = TextMobject("Three things need to be proven")
|
||||||
|
items = TextMobject([
|
||||||
|
"\\begin{enumerate}",
|
||||||
|
"\\item Points on Pseudo-Hilbert-curves really do converge",
|
||||||
|
"\\item Limit function HC is continuous",
|
||||||
|
"\\item Limit function HC touches all points in the unit square"
|
||||||
|
"\\end{enumerate}",
|
||||||
|
])
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue