First version
Change-Id: Ia0022a4f5c351fcf571d198d2e1def998b2689d2
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4f8adcf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+__pycache__/
+media/
diff --git a/img/arsmagna.png b/img/arsmagna.png
new file mode 100644
index 0000000..39daa30
--- /dev/null
+++ b/img/arsmagna.png
Binary files differ
diff --git a/img/cardano.jpg b/img/cardano.jpg
new file mode 100644
index 0000000..905df4a
--- /dev/null
+++ b/img/cardano.jpg
Binary files differ
diff --git a/img/factions.png b/img/factions.png
new file mode 100644
index 0000000..8c907ef
--- /dev/null
+++ b/img/factions.png
Binary files differ
diff --git a/img/girard.jpg b/img/girard.jpg
new file mode 100644
index 0000000..7006f91
--- /dev/null
+++ b/img/girard.jpg
Binary files differ
diff --git a/img/inventionnouvelle.png b/img/inventionnouvelle.png
new file mode 100644
index 0000000..519c381
--- /dev/null
+++ b/img/inventionnouvelle.png
Binary files differ
diff --git a/img/meditationes.png b/img/meditationes.png
new file mode 100644
index 0000000..c3053e6
--- /dev/null
+++ b/img/meditationes.png
Binary files differ
diff --git a/img/newton.jpg b/img/newton.jpg
new file mode 100644
index 0000000..1d39117
--- /dev/null
+++ b/img/newton.jpg
Binary files differ
diff --git a/img/pacioli.jpg b/img/pacioli.jpg
new file mode 100644
index 0000000..f4e8ccf
--- /dev/null
+++ b/img/pacioli.jpg
Binary files differ
diff --git a/img/sommepuissances.png b/img/sommepuissances.png
new file mode 100644
index 0000000..d016bd8
--- /dev/null
+++ b/img/sommepuissances.png
Binary files differ
diff --git a/img/sommepuissances2.png b/img/sommepuissances2.png
new file mode 100644
index 0000000..3aec1e8
--- /dev/null
+++ b/img/sommepuissances2.png
Binary files differ
diff --git a/img/suma.png b/img/suma.png
new file mode 100644
index 0000000..ddbf2e8
--- /dev/null
+++ b/img/suma.png
Binary files differ
diff --git a/img/viete.jpeg b/img/viete.jpeg
new file mode 100644
index 0000000..3942c43
--- /dev/null
+++ b/img/viete.jpeg
Binary files differ
diff --git a/img/waring.jpg b/img/waring.jpg
new file mode 100644
index 0000000..312a82c
--- /dev/null
+++ b/img/waring.jpg
Binary files differ
diff --git a/symmetric_polynomials.py b/symmetric_polynomials.py
new file mode 100644
index 0000000..6a4ff7f
--- /dev/null
+++ b/symmetric_polynomials.py
@@ -0,0 +1,346 @@
+#!/usr/bin/env python
+
+from manimlib.imports import *
+
+def get_title(title_str = "Història"):
+ title = TextMobject(title_str)
+ title.scale(1.5)
+ title.to_edge(UP)
+ return title
+
+def create_image(source, scale=2.5):
+ img = ImageMobject(source)
+ img.scale(scale)
+ return img
+
+def create_label(img, desc):
+ label = TextMobject(desc)
+ label.scale(0.7)
+ label.next_to(img, DOWN)
+ return label
+
+class IntroHistoria(Scene):
+ def construct(self):
+ title = get_title()
+
+ self.play(Write(title))
+ self.wait(1.5)
+
+ pol = TexMobject("p(x) = ", "x^n + a_{n-1} x^{n-1} + \ldots + a_0")
+ pol0, pol1 = pol.split();
+
+ pol2 = TexMobject("\\prod_{i = 1}^n (x - ", "\\alpha_i", ")")
+ pol2_1, alpha_pol, pol2_3 = pol2.split()
+
+ vieta1 = TexMobject("a_{n-1} = ", "\\alpha_1", " + \ldots + ", "\\alpha_n")
+ vieta1_i, vieta1_alpha1, vieta1_plus, vieta1_alphan = vieta1.split()
+
+ vietamore = TexMobject("\\vdots")
+
+ vieta2 = TexMobject("a_0 = ", "\\alpha_1", " \cdot \ldots \cdot ", "\\alpha_n")
+ vieta2_i, vieta2_alpha1, vieta2_prod, vieta2_alphan = vieta2.split()
+
+ general_vieta = TexMobject("(-1)^k a_{n-k} = \\sum_{1 \\le i_1 < i_2 < \\cdots < i_k \\le n} \\left( \\prod_{j=1}^k \\alpha_{i_j} \\right)")
+ general_vieta_desc = TextMobject("Fòrmules de Viète")
+
+ vietas = VGroup(vieta1, vietamore, vieta2)
+ vietamore.next_to(vieta1, DOWN, buff = 0.4)
+ vieta2.next_to(vietamore, DOWN, buff = 0.4)
+ vietas.next_to(pol, DOWN, buff = 1)
+ flow = VGroup(pol, vietas)
+ flow.center()
+
+ # This should be done after the flow is centered:
+ pol2.next_to(pol0, RIGHT)
+ general_vieta.align_to(vietas, UP)
+ general_vieta_desc.next_to(vietas, DOWN)
+
+ alpha_pol2 = alpha_pol.copy()
+ alpha_pol3 = alpha_pol.copy()
+ alpha_pol4 = alpha_pol.copy()
+
+ framebox = SurroundingRectangle(general_vieta, buff = .15)
+ framebox.set_stroke(WHITE, 4)
+
+ # Animations:
+ self.play(Write(pol))
+ self.wait(1.5)
+
+ self.play(Transform(pol1, pol2))
+ self.wait(1.5)
+
+ self.play(ApplyMethod(
+ alpha_pol.set_color, RED,
+ rate_func = there_and_back,
+ run_time = 2
+ ))
+ self.wait(1.5)
+
+ self.play(
+ Write(vieta1),
+ Transform(alpha_pol, vieta1_alpha1),
+ Transform(alpha_pol2, vieta1_alphan)
+ )
+ self.wait(1.5)
+
+ self.play(FadeIn(vietamore))
+ self.play(
+ Write(vieta2),
+ Transform(alpha_pol3, vieta2_alpha1),
+ Transform(alpha_pol4, vieta2_alphan)
+ )
+ self.wait(1.5)
+
+ self.play(Transform(vietas, general_vieta))
+ self.wait(1.5)
+
+ self.play(
+ FadeIn(framebox),
+ FadeInFrom(general_vieta_desc, UP)
+ )
+ self.wait(1.5)
+
+class LucaPacioli(Scene):
+ def construct(self):
+ title = get_title()
+ self.add(title)
+ self.wait(1.5)
+
+ luca = create_image("img/pacioli.jpg")
+ luca.to_edge(LEFT, buff=1)
+ luca_desc = create_label(luca, "Luca Pacioli (c. 1445-1509)")
+
+ suma = create_image("img/suma.png")
+ suma.to_edge(RIGHT, buff=1)
+ suma_desc = create_label(suma, "\\textit{Summa de arithmetica} (1494)")
+
+ self.play(
+ FadeIn(luca),
+ FadeInFrom(luca_desc, UP)
+ )
+ self.wait(1.5)
+
+ self.play(
+ FadeIn(suma),
+ FadeInFrom(suma_desc, UP)
+ )
+ self.wait(1.5)
+
+ cardano = create_image("img/cardano.jpg")
+ cardano.to_edge(LEFT, buff=1)
+ cardano_desc = create_label(cardano, "Girolamo Cardano (1501-1576)")
+
+ arsmagna = create_image("img/arsmagna.png")
+ arsmagna.to_edge(RIGHT, buff=1)
+ arsmagna_desc = create_label(arsmagna, "\\textit{Ars Magna} (1545)")
+
+ cardano_cita = TextMobject("``Differentia aequationum verarum et fictarui \\\\ semper est numerus quadrato''")
+ cardano_cita.scale(0.825)
+ cardano_cita.next_to(cardano, RIGHT)
+
+ self.play(
+ FadeOut(suma),
+ FadeOut(suma_desc),
+ FadeOut(luca),
+ FadeIn(cardano),
+ Transform(luca_desc, cardano_desc)
+ )
+ self.remove(luca_desc)
+ self.add(cardano_desc)
+ self.wait(1.5)
+
+ self.play(
+ FadeIn(arsmagna),
+ FadeInFrom(arsmagna_desc, UP)
+ )
+ self.wait(1.5)
+
+ self.play(
+ FadeOut(arsmagna),
+ FadeOut(arsmagna_desc),
+ Write(cardano_cita)
+ )
+ self.wait(1.5)
+
+ viete = create_image("img/viete.jpeg")
+ viete.to_edge(LEFT, buff=1)
+ viete_desc = create_label(viete, "François Viète (1540-1603)")
+
+ self.play(
+ FadeOut(cardano_cita),
+ FadeOut(cardano),
+ FadeIn(viete),
+ Transform(cardano_desc, viete_desc)
+ )
+ self.remove(cardano_desc)
+ self.add(viete_desc)
+ self.wait(1.5)
+
+ girard = create_image("img/girard.jpg")
+ girard.to_edge(LEFT, buff=1)
+ girard_desc = create_label(girard, "Albert Girard (1595-1632)")
+
+ self.play(
+ FadeOut(viete),
+ FadeIn(girard),
+ Transform(viete_desc, girard_desc)
+ )
+ self.remove(viete_desc)
+ self.add(girard_desc)
+ self.wait(1.5)
+
+ primer = TextMobject("Primer teorema de polinomis simètrics, \\\\ sense saber-ho")
+ primer.scale(0.825)
+ primer.next_to(girard, RIGHT)
+
+ self.play(Write(primer))
+ self.wait(1.5)
+
+ invention = create_image("img/inventionnouvelle.png", 2)
+ invention.to_edge(RIGHT, buff=1)
+ invention_desc = create_label(invention, "\\textit{Invention nouvelle en l'algèbre} (1629)")
+
+ self.play(
+ FadeOut(primer),
+ FadeIn(invention),
+ FadeInFrom(invention_desc, UP)
+ )
+ self.wait(1.5)
+
+ factions = create_image("img/factions.png", 1)
+ factions.to_edge(RIGHT, buff=1)
+
+ self.play(
+ FadeOut(invention),
+ FadeIn(factions),
+ ApplyMethod(invention_desc.next_to, factions, DOWN)
+ )
+ self.wait(1.5)
+
+ sommes = create_image("img/sommepuissances.png")
+ sommes.to_edge(RIGHT, buff=1)
+
+ self.play(
+ FadeOut(factions),
+ FadeIn(sommes),
+ ApplyMethod(invention_desc.next_to, sommes, DOWN)
+ )
+ self.wait(1.5)
+
+ sommes2 = create_image("img/sommepuissances2.png", 1)
+ sommes2.to_edge(RIGHT, buff=1)
+ sommes2_desc = create_label(sommes2, "\\textit{A Short Account of the History of Symmetric} \\\\ \\textit{Functions of Roots of Equations}, \\\\ H. Gray Funkhouser (1930).")
+
+ self.play(
+ FadeOut(sommes),
+ FadeIn(sommes2),
+ Transform(invention_desc, sommes2_desc)
+ )
+ self.remove(invention_desc)
+ self.add(sommes2_desc)
+ self.wait(1.5)
+
+ notthesame = TexMobject("\\sum_{i < j} \\alpha_i \\alpha_j \\neq \\sum_{i} \\alpha_i^2")
+ notthesame.next_to(girard, RIGHT).shift(1*RIGHT)
+
+ self.play(
+ FadeOut(sommes2),
+ FadeOut(sommes2_desc),
+ Write(notthesame)
+ )
+ self.wait(1.5)
+
+ waring = create_image("img/waring.jpg")
+ waring.to_edge(LEFT, buff=1)
+ waring_desc = create_label(waring, "Edward Waring (1736-1798)")
+
+ self.play(
+ FadeOut(notthesame),
+ FadeOut(girard),
+ FadeIn(waring),
+ Transform(girard_desc, waring_desc)
+ )
+ self.remove(girard_desc)
+ self.add(waring_desc)
+ self.wait(1.5)
+
+class EdwardWaring(Scene):
+ def construct(self):
+ title = get_title()
+ self.add(title)
+
+ waring = create_image("img/waring.jpg")
+ waring.to_edge(LEFT, buff=1)
+ waring_desc = create_label(waring, "Edward Waring (1736-1798)")
+
+ self.add(waring)
+ self.add(waring_desc)
+
+ th1 = TextMobject("Teorema 1. ", "???").set_color(GRAY)
+ th2 = TextMobject("Teorema 2. ???").set_color(GRAY)
+ th3 = TextMobject("Teorema 3. ", "???").set_color(GRAY)
+
+ th1.shift(1*UP)
+ th3.shift(1*DOWN)
+
+ teoremes = VGroup(th1, th2, th3)
+ teoremes.next_to(waring, RIGHT).shift(1*RIGHT)
+
+ self.play(
+ FadeInFrom(th1, UP),
+ FadeIn(th2),
+ FadeInFrom(th3, DOWN)
+ )
+ self.wait(1.5)
+
+ th1_pre, th1_question = th1.split()
+ th1_text = TexMobject("\\sum_{i} \\alpha_i^k = f_k(a_i) \\quad \\forall k \\in \\mathbb{N}")
+ th1_text.scale(0.8)
+ th1_text.next_to(th1_pre)
+
+ self.play(
+ Transform(th1_question, th1_text),
+ ApplyMethod(th1_pre.set_color, WHITE)
+ )
+ self.wait(1.5)
+
+ th3_pre, th3_question = th3.split()
+ th3_text = TextMobject("Precursor al Teo. Fonamental \\\\ dels Polinomis Simètrics")
+ th3_text.scale(0.7)
+ th3_text.next_to(th3_pre)
+
+ self.play(
+ Transform(th3_question, th3_text),
+ ApplyMethod(th3_pre.set_color, WHITE)
+ )
+ self.wait(1.5)
+
+ meditationes = create_image("img/meditationes.png")
+ meditationes.to_edge(RIGHT, buff=2)
+ meditationes_desc = create_label(meditationes, "\\textit{Meditationes Algebraicae} (1770).")
+
+ self.play(
+ FadeOut(th1),
+ FadeOut(th2),
+ FadeOut(th3),
+ FadeIn(meditationes),
+ FadeInFrom(meditationes_desc, UP)
+ )
+ self.wait(1.5)
+
+ conjectura = VGroup(
+ TextMobject("$n$ es pot escriure com a màxim com a suma de:"),
+ TextMobject("$\\cdot$ 4 quadrats"),
+ TextMobject("$\\cdot$ 9 cubs"),
+ TextMobject("$\\cdot$ 19 biquadrats"),
+ TextMobject("$\\cdot$ en general, $m$ potències k-èssimes positives, \\\\ essent $m$ depenent de $k$ ($\\forall k \\in \\mathbb{N}$)"),
+ )
+ conjectura.scale(0.8)
+ conjectura.arrange(DOWN, buff = MED_LARGE_BUFF, aligned_edge = LEFT)
+ conjectura.to_edge(RIGHT, buff=0.75)
+
+ self.play(
+ FadeOut(meditationes),
+ Write(conjectura)
+ )
+ self.wait(1.5)