@@ -53,15 +53,40 @@ def construct(self):
5353 self .play (FadeOut (Group (* self .mobjects )))
5454
5555 # self.camera.frame.save_state()
56+ title2 = Tex (r"2. Objetivos" ).to_edge (UP + LEFT )
57+
58+ text = Tex (r"""
59+ \begin{enumerate}
60+ \item Explorar matemáticamente 3 técnicas de formación fractal:
61+ \subitem - Sistemas de Lindenmayer
62+ \subitem - Sistemas de funciones iteradas
63+ \subitem - Sistemas dinámicos
64+
65+ \item Analizar las consecuencias reales de las propiedades estudiadas:
66+ \subitem - Biología
67+ \subitem - Ingeniería
68+ \subitem - Metereología
69+ \subitem - Medicina
70+ \subitem - ...
71+
72+ \end{enumerate}
73+ """ , font_size = 28 , tex_environment = "flushleft" ).next_to (title2 , DOWN * 2 , aligned_edge = LEFT )
74+
75+ self .play (Write (title2 ))
76+ self .play (Write (text ))
77+
78+ self .next_slide ()
79+
80+ self .play (FadeOut (Group (title2 , text )))
5681
5782 title = Tex (r"1. ¿Qué es un fractal?" ).to_edge (UP + LEFT )
5883 text1 = Tex (r"En la \textbf{naturaleza} observamos estructuras que podríamos denominar \textit{fractales}." , font_size = 28 , ).next_to (title , DOWN * 2 , aligned_edge = LEFT )
5984 text2 = Tex (r"""Constarían de algunas propiedades que los caracterizan, destacando su \textit{autosimilaridad}.""" , font_size = 28 , tex_environment = "flushleft" ).next_to (text1 , DOWN , aligned_edge = LEFT )
6085
6186 image = Group (
62- ImageMobject ("copo-nieve.png" ).scale (0.5 ),
63- ImageMobject ("rayo.png" ).scale (0.5 ),
64- ImageMobject ("helecho.png" ).scale (0.5 ),
87+ ImageMobject ("copo-nieve.png" ).scale (0.5 ),
88+ ImageMobject ("rayo.png" ).scale (0.5 ),
89+ ImageMobject ("helecho.png" ).scale (0.5 ),
6590 ).arrange (RIGHT ).to_corner (DOWN )
6691
6792 self .play (Write (title ), Write (text1 ))
@@ -70,7 +95,6 @@ def construct(self):
7095
7196 self .play (Write (text2 ))
7297
73-
7498 self .next_slide ()
7599
76100 self .play (FadeIn (image ))
@@ -84,28 +108,7 @@ def construct(self):
84108
85109 self .next_slide ()
86110
87- title2 = Tex (r"2. Objetivos" ).to_edge (UP + LEFT )
88-
89- text = Tex (r"""
90- \begin{enumerate}
91- \item Explorar matemáticamente 3 técnicas de formación fractal:
92- \subitem - Sistemas de Lindenmayer
93- \subitem - Sistemas de funciones iteradas
94- \subitem - Sistemas dinámicos
95-
96- \item Analizar las consecuencias reales de las propiedades estudiadas:
97- \subitem - Biología
98- \subitem - Ingeniería
99- \subitem - Metereología
100- \subitem - Medicina
101- \subitem - ...
102-
103- \end{enumerate}
104- """ , font_size = 28 , tex_environment = "flushleft" ).next_to (title , DOWN * 2 , aligned_edge = LEFT )
105-
106- # self.play(Restore(self.camera.frame))
107- self .play (FadeOut (Group (text1 , text2 , image )), Transform (title , title2 ))
108- self .play (Write (text ))
111+ self .play (FadeOut (Group (title , text1 , text2 , image )))
109112
110113 ###
111114 ### Slide 3
@@ -142,16 +145,19 @@ def construct(self):
142145 self .play (Transform (kc , kc2 ))
143146 """ self.play(Transform(b1, b2), Transform(b1text, b2text)) """
144147
145- self .next_slide ()
146148 self .play (Transform (kc , kc3 ))
147149
148- self .next_slide ()
149150 self .play (Transform (kc , kc4 ))
150151 self .play (Transform (kc , kc5 ))
151152 self .play (Transform (kc , kc6 ))
152153 self .play (Transform (kc , kc7 ))
153154 self .play (Transform (kc , kc8 ))
154155
156+ self .next_slide ()
157+
158+ expression = Tex (r"S = \left( \Sigma, P, \omega \right)" ).next_to (kc , UP )
159+ self .play (Write (expression ))
160+
155161 # PENDIENTE: Conseguir poner los Braces en su sitio
156162
157163 ###
@@ -160,6 +166,8 @@ def construct(self):
160166
161167 self .next_slide ()
162168
169+ self .play (Unwrite (expression ))
170+
163171 subtitle = Tex (r"\textbf{Instrucciones}" , font_size = 36 )
164172 text1 = Tex (r"F $\rightarrow$ Mover 1 paso" , font_size = 36 ).next_to (subtitle , DOWN , aligned_edge = LEFT )
165173 text2 = Tex (r"+ $\rightarrow$ Girar $\frac{\pi}{3}$" , font_size = 36 ).next_to (text1 , DOWN , aligned_edge = LEFT )
@@ -207,7 +215,7 @@ def construct(self):
207215 lambda m : m .move_to (kc10 .point_from_proportion (tracker .get_value ()))
208216 )
209217
210- STOPS = [.25 , .5 , .75 , 1.0 ]
218+ STOPS = [1.0 ]
211219
212220 self .play (Transform (kc , kc10 ), Transform (iteration , iteration1 ))
213221
@@ -231,9 +239,14 @@ def construct(self):
231239
232240 title3 = Tex (r"3. Sistemas Lindenmayer: Consecuencias" ).to_edge (UP + LEFT )
233241
234- island = KochCurve (7 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 )
235- island1 = KochCurve (7 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 ).rotate (240 * DEGREES , about_point = island .get_start ()).shift (RIGHT * 5 )
236- island2 = KochCurve (7 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 ).rotate (- 240 * DEGREES , about_point = island .get_end ()).shift (LEFT * 5 )
242+ island = KochCurve (0 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 )
243+ island1 = KochCurve (0 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 ).rotate (240 * DEGREES , about_point = island .get_start ()).shift (RIGHT * 5 )
244+ island2 = KochCurve (0 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 ).rotate (- 240 * DEGREES , about_point = island .get_end ()).shift (LEFT * 5 )
245+
246+ island3 = KochCurve (1 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 )
247+ island4 = KochCurve (1 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 ).rotate (240 * DEGREES , about_point = island .get_start ()).shift (RIGHT * 5 )
248+ island5 = KochCurve (1 , stroke_width = 1 , length = 5 ).next_to (title , DOWN * 2 + RIGHT * 5 ).rotate (- 240 * DEGREES , about_point = island .get_end ()).shift (LEFT * 5 )
249+
237250
238251 text = Tex (r"\[A = \lim_{n\rightarrow\infty} \frac{\sqrt{3}}{20} \left(8-3\left(\frac{4}{9}\right)^n\right) = \frac{8\sqrt{3}}{20} = \boxed{\frac{2\sqrt{3}}{5}}\]" , font_size = 28 ).next_to (title , DOWN * 2 , aligned_edge = LEFT )
239252 text1 = Tex (r"\[P = \lim_{n\rightarrow\infty} 3 \cdot\left( \frac{4}{3} \right)^n = \boxed{\infty}\]" , font_size = 28 ).next_to (text , DOWN , aligned_edge = LEFT )
@@ -244,21 +257,65 @@ def construct(self):
244257
245258 self .next_slide ()
246259
260+ self .play (Transform (island , island3 ), Transform (island1 , island4 ), Transform (island2 , island5 ))
261+
262+
263+ island3 = KochCurve (2 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT )
264+ island4 = KochCurve (2 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (240 * DEGREES , about_point = island3 .get_start ()).shift (RIGHT * 5 )
265+ island5 = KochCurve (2 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (- 240 * DEGREES , about_point = island3 .get_end ()).shift (LEFT * 5 )
266+
267+ self .play (Transform (island , island3 ), Transform (island1 , island4 ), Transform (island2 , island5 ))
268+
269+ island3 = KochCurve (3 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT )
270+ island4 = KochCurve (3 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (240 * DEGREES , about_point = island3 .get_start ()).shift (RIGHT * 5 )
271+ island5 = KochCurve (3 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (- 240 * DEGREES , about_point = island3 .get_end ()).shift (LEFT * 5 )
272+
273+ self .play (Transform (island , island3 ), Transform (island1 , island4 ), Transform (island2 , island5 ))
274+
275+ island3 = KochCurve (4 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT )
276+ island4 = KochCurve (4 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (240 * DEGREES , about_point = island3 .get_start ()).shift (RIGHT * 5 )
277+ island5 = KochCurve (4 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (- 240 * DEGREES , about_point = island3 .get_end ()).shift (LEFT * 5 )
278+
279+ self .play (Transform (island , island3 ), Transform (island1 , island4 ), Transform (island2 , island5 ))
280+
281+ island3 = KochCurve (7 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT )
282+ island4 = KochCurve (7 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (240 * DEGREES , about_point = island3 .get_start ()).shift (RIGHT * 5 )
283+ island5 = KochCurve (7 , stroke_width = 1 , length = 5 ).to_edge (RIGHT ).shift (UP * 2 , LEFT ).rotate (- 240 * DEGREES , about_point = island3 .get_end ()).shift (LEFT * 5 )
284+
285+ self .play (Transform (island , island3 ), Transform (island1 , island4 ), Transform (island2 , island5 ))
286+
287+ self .next_slide ()
288+
247289 self .play (Write (text ))
248290
249291 self .next_slide ()
250292
251293 self .play (Write (text1 ))
252294 self .play (Write (text2 ))
253295
296+ ##
297+ ## Slide 9: Bronquio
298+ ##
299+
300+ self .next_slide ()
301+
302+ image = ImageMobject ("bronquio.png" ).scale (1.5 ).to_edge (DOWN )
303+
304+ self .play (FadeOut (Group (island , island1 , island2 , text , text1 , text2 )))
305+ self .play (FadeIn (image ))
306+
307+ self .next_slide ()
308+
309+ self .play (FadeOut (image ))
310+
254311 ##
255312 ## Slide 6: IFS
256313 ##
257314
258315 self .next_slide ()
259316
260- title4 = Tex (r"4 . Sistemas de funciones iteradas" ).to_edge (UP + LEFT )
261- self .play (FadeOut ( Group ( island , island1 , island2 , text , text1 , text2 )), Transform (title , title4 ))
317+ title4 = Tex (r"2 . Sistemas de funciones iteradas" ).to_edge (UP + LEFT )
318+ self .play (Transform (title , title4 ))
262319
263320 square_length = 4
264321 border = VGroup (Square (stroke_color = WHITE , stroke_width = 1 , side_length = square_length ))
@@ -549,7 +606,7 @@ def update_graph(graph):
549606 ).scale (0.75 )
550607 ).arrange (DOWN , buff = DEFAULT_MOBJECT_TO_MOBJECT_BUFFER * 2.5 )
551608
552- labels = body [1 ].get_axis_labels (x_label = "r " , y_label = "x" )
609+ labels = body [1 ].get_axis_labels (x_label = "C " , y_label = "x" )
553610
554611 def logistic_map (r , x ):
555612 return r * x * (1 - x )
@@ -561,7 +618,7 @@ def bifurcation_diagram(r_values, iterations, last):
561618 if i >= (iterations - last ):
562619 yield r_values , x
563620
564- r_values = np .linspace (0.7 , 4.0 , 15000 )
621+ r_values = np .linspace (0.7 , 4.0 , 30000 )
565622 points = VGroup ()
566623
567624 for r , x in bifurcation_diagram (r_values , 1000 , 100 ):
@@ -572,15 +629,28 @@ def bifurcation_diagram(r_values, iterations, last):
572629
573630 self .play (FadeIn (points , lag_ratio = 0.01 ), run_time = 2 )
574631
632+
633+ # Slide with GIF
575634 self .next_slide ()
576635
577636 self .play (FadeOut (body ), FadeOut (points ), FadeOut (title ), FadeOut (labels ))
578637
638+ gif = ImageMobject ("./mandelbrot.gif" ).scale (1.5 ).to_edge (DOWN )
639+
640+ self .play (FadeIn (gif ))
641+
642+ self .next_slide ()
643+
644+ self .play (FadeOut (gif ))
645+
646+
579647 body = Group (Tex (r"¡Gracias por su atención!" ),
580648 ImageMobject ("qr-code.png" )).arrange (DOWN )
581649
582650 self .play (FadeIn (body ))
583651
652+ self .next_slide ()
653+
584654 self .play (FadeOut (body ))
585655
586656 colab = VGroup (
0 commit comments