aboutsummaryrefslogtreecommitdiffstats
path: root/vorlesungen/punktgruppen
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--vorlesungen/punktgruppen/.gitignore12
-rw-r--r--vorlesungen/punktgruppen/Makefile18
-rw-r--r--vorlesungen/punktgruppen/crystals.py553
-rw-r--r--vorlesungen/punktgruppen/media/images/nosignal.jpgbin0 -> 711846 bytes
-rw-r--r--vorlesungen/punktgruppen/poetry.lock743
-rw-r--r--vorlesungen/punktgruppen/pyproject.toml15
-rw-r--r--vorlesungen/punktgruppen/script.pdfbin0 -> 34480 bytes
-rw-r--r--vorlesungen/punktgruppen/script.tex102
-rw-r--r--vorlesungen/punktgruppen/shotcut/Punktgruppen/Punktgruppen.mlt101
-rw-r--r--vorlesungen/punktgruppen/slides.pdfbin0 -> 789335 bytes
-rw-r--r--vorlesungen/punktgruppen/slides.tex838
11 files changed, 2382 insertions, 0 deletions
diff --git a/vorlesungen/punktgruppen/.gitignore b/vorlesungen/punktgruppen/.gitignore
new file mode 100644
index 0000000..841ea7e
--- /dev/null
+++ b/vorlesungen/punktgruppen/.gitignore
@@ -0,0 +1,12 @@
+# directories
+__pycache__
+media/Tex
+media/images/crystal
+media/videos
+build
+
+# files
+script.log
+slides.log
+slides.vrb
+missfont.log
diff --git a/vorlesungen/punktgruppen/Makefile b/vorlesungen/punktgruppen/Makefile
new file mode 100644
index 0000000..302e976
--- /dev/null
+++ b/vorlesungen/punktgruppen/Makefile
@@ -0,0 +1,18 @@
+TEX=xelatex
+TEXARGS=--output-directory=build --halt-on-error --shell-escape
+
+all: slides.pdf script.pdf media
+
+.PHONY: clean
+clean:
+ @rm -rfv build
+
+%.pdf: %.tex
+ mkdir -p build
+ $(TEX) $(TEXARGS) $<
+ $(TEX) $(TEXARGS) $<
+ cp build/$@ .
+
+media:
+ poetry install
+ poetry run manim -ql crystals.py
diff --git a/vorlesungen/punktgruppen/crystals.py b/vorlesungen/punktgruppen/crystals.py
new file mode 100644
index 0000000..b29d7e4
--- /dev/null
+++ b/vorlesungen/punktgruppen/crystals.py
@@ -0,0 +1,553 @@
+from manim import *
+
+import math as m
+import numpy as np
+import itertools as it
+
+# configure style
+config.background_color = '#202020'
+config.tex_template.add_to_preamble(
+ r"\usepackage[p,osf]{scholax}"
+ r"\usepackage{amsmath}"
+ r"\usepackage[scaled=1.075,ncf,vvarbb]{newtxmath}"
+)
+
+# scenes
+class Geometric2DSymmetries(Scene):
+ def construct(self):
+ self.intro()
+ self.cyclic()
+ self.dihedral()
+ self.circle()
+
+ def intro(self):
+ # create square
+ square = Square()
+ square.set_fill(PINK, opacity=.5)
+ self.play(SpinInFromNothing(square))
+ self.wait()
+
+ # the action of doing nothing
+ action = MathTex(r"\mathbb{1}")
+ self.play(Write(action))
+ self.play(ApplyMethod(square.scale, 1.2))
+ self.play(ApplyMethod(square.scale, 1/1.2))
+ self.play(FadeOut(action))
+
+ # show some reflections
+ axis = DashedLine(2 * LEFT, 2 * RIGHT)
+ sigma = MathTex(r"\sigma")
+ sigma.next_to(axis, RIGHT)
+
+ self.play(Create(axis))
+ self.play(Write(sigma))
+
+ self.play(ApplyMethod(square.flip, RIGHT))
+ self.wait()
+
+ for d in [UP + RIGHT, UP]:
+ self.play(
+ Rotate(axis, PI/4),
+ Rotate(sigma, PI/4, about_point=ORIGIN))
+
+ self.play(Rotate(sigma, -PI/4), run_time=.5)
+ self.play(ApplyMethod(square.flip, d))
+
+ self.play(
+ FadeOutAndShift(sigma),
+ Uncreate(axis))
+
+ # show some rotations
+ dot = Dot(UP + RIGHT)
+ figure = VGroup(square, dot)
+
+ rot = MathTex(r"r")
+ self.play(Write(rot), Create(dot))
+
+ last = rot
+ for newrot in map(MathTex, [r"r", r"r^2", r"r^3"]):
+ self.play(
+ ReplacementTransform(last, newrot),
+ Rotate(figure, PI/2, about_point=ORIGIN))
+ self.wait()
+ last = newrot
+
+ self.play(Uncreate(dot), FadeOut(square), FadeOut(last))
+
+
+ def cyclic(self):
+ # create symmetric figure
+ figure = VGroup()
+ prev = [1.5, 0, 0]
+ for i in range(1,6):
+ pos = [
+ 1.5*m.cos(2 * PI/5 * i),
+ 1.5*m.sin(2 * PI/5 * i),
+ 0
+ ]
+
+ if prev:
+ line = Line(prev, pos)
+ figure.add(line)
+
+ dot = Dot(pos, radius=.1)
+ if i == 5:
+ dot.set_fill(RED)
+
+ prev = pos
+ figure.add(dot)
+
+ group = MathTex(r"G = \langle r \rangle")
+ self.play(Write(group), run_time = 2)
+ self.wait()
+ self.play(ApplyMethod(group.to_edge, UP))
+
+ actions = map(MathTex, [
+ r"\mathbb{1}", r"r", r"r^2",
+ r"r^3", r"r^4", r"\mathbb{1}"])
+
+ action = next(actions, MathTex(r"r"))
+
+ self.play(Create(figure))
+ self.play(Write(action))
+ self.wait()
+
+ for i in range(5):
+ newaction = next(actions, MathTex(r"r"))
+ self.play(
+ ReplacementTransform(action, newaction),
+ Rotate(figure, 2*PI/5, about_point=ORIGIN))
+ action = newaction
+
+ self.play(Uncreate(figure), FadeOut(action))
+
+ whole_group = MathTex(
+ r"G = \langle r \rangle"
+ r"= \left\{\mathbb{1}, r, r^2, r^3, r^4 \right\}")
+
+ self.play(ApplyMethod(group.move_to, ORIGIN))
+ self.play(ReplacementTransform(group, whole_group))
+ self.wait()
+
+ cyclic = MathTex(
+ r"C_n = \langle r \rangle"
+ r"= \left\{\mathbb{1}, r, r^2, \dots, r^{n-1} \right\}")
+
+ cyclic_title = Tex(r"Zyklische Gruppe")
+ cyclic_title.next_to(cyclic, UP * 2)
+
+ cyclic.scale(1.2)
+ cyclic_title.scale(1.2)
+
+ self.play(ReplacementTransform(whole_group, cyclic))
+ self.play(FadeInFrom(cyclic_title, UP))
+
+ self.wait(5)
+ self.play(FadeOut(cyclic), FadeOut(cyclic_title))
+
+ def dihedral(self):
+ # create square
+ square = Square()
+ square.set_fill(PINK, opacity=.5)
+
+ # generator equation
+ group = MathTex(
+ r"G = \langle \sigma, r \,|\,",
+ r"\sigma^2 = \mathbb{1},",
+ r"r^4 = \mathbb{1},",
+ r"(\sigma r)^2 = \mathbb{1} \rangle")
+
+ self.play(Write(group), run_time = 2)
+ self.wait()
+ self.play(ApplyMethod(group.to_edge, UP))
+ self.play(FadeIn(square))
+
+ axis = DashedLine(2 * LEFT, 2 * RIGHT)
+ sigma = MathTex(r"\sigma^2 = \mathbb{1}")
+ sigma.next_to(axis, RIGHT)
+ self.play(Create(axis), Write(sigma))
+ self.play(ApplyMethod(square.flip, RIGHT))
+ self.play(ApplyMethod(square.flip, RIGHT))
+ self.play(Uncreate(axis), FadeOut(sigma))
+
+ # rotations
+ dot = Dot(UP + RIGHT)
+ rot = MathTex(r"r^4 = \mathbb{1}")
+ rot.next_to(square, DOWN * 3)
+
+ figure = VGroup(dot, square)
+
+ self.play(Write(rot), Create(dot))
+ for i in range(4):
+ self.play(Rotate(figure, PI/2))
+ self.play(FadeOut(rot), Uncreate(dot))
+
+ # rotation and flip
+ action = MathTex(r"(\sigma r)^2 = \mathbb{1}")
+ action.next_to(square, DOWN * 5)
+
+ dot = Dot(UP + RIGHT)
+ axis = DashedLine(2 * LEFT, 2 * RIGHT)
+ self.play(Create(dot), Create(axis), Write(action))
+
+ figure = VGroup(dot, square)
+
+ for i in range(2):
+ self.play(Rotate(figure, PI/2))
+ self.play(ApplyMethod(figure.flip, RIGHT))
+ self.wait()
+
+ self.play(Uncreate(dot), Uncreate(axis), FadeOut(action))
+ self.play(FadeOut(square))
+
+ # equation for the whole
+ whole_group = MathTex(
+ r"G &= \langle \sigma, r \,|\,"
+ r"\sigma^2 = r^4 = (\sigma r)^2 = \mathbb{1} \rangle \\"
+ r"&= \left\{"
+ r"\mathbb{1}, r, r^2, r^3, \sigma, \sigma r, \sigma r^2, \sigma r^3"
+ r"\right\}")
+
+ self.play(ApplyMethod(group.move_to, ORIGIN))
+ self.play(ReplacementTransform(group, whole_group))
+ self.wait(2)
+
+ dihedral = MathTex(
+ r"D_n &= \langle \sigma, r \,|\,"
+ r"\sigma^2 = r^n = (\sigma r)^2 = \mathbb{1} \rangle \\"
+ r"&= \left\{"
+ r"\mathbb{1}, r, r^2, \dots, \sigma, \sigma r, \sigma r^2, \dots"
+ r"\right\}")
+
+ dihedral_title = Tex(r"Diedergruppe: Symmetrien eines \(n\)-gons")
+ dihedral_title.next_to(dihedral, UP * 2)
+
+ dihedral.scale(1.2)
+ dihedral_title.scale(1.2)
+
+ self.play(ReplacementTransform(whole_group, dihedral))
+ self.play(FadeInFrom(dihedral_title, UP))
+
+ self.wait(5)
+ self.play(FadeOut(dihedral), FadeOut(dihedral_title))
+
+ def circle(self):
+ circle = Circle(radius=2)
+ dot = Dot()
+ dot.move_to(2 * RIGHT)
+
+ figure = VGroup(circle, dot)
+ group_name = MathTex(r"C_\infty")
+
+ # create circle
+ self.play(Create(circle))
+ self.play(Create(dot))
+
+ # move it around
+ self.play(Rotate(figure, PI/3))
+ self.play(Rotate(figure, PI/6))
+ self.play(Rotate(figure, -PI/3))
+
+ # show name
+ self.play(Rotate(figure, PI/4), Write(group_name))
+ self.play(Uncreate(figure))
+
+ nsphere = MathTex(r"C_\infty \cong S^1 = \left\{z \in \mathbb{C} : |z| = 1\right\}")
+ nsphere_title = Tex(r"Kreisgruppe")
+ nsphere_title.next_to(nsphere, 2 * UP)
+
+ nsphere.scale(1.2)
+ nsphere_title.scale(1.2)
+
+ self.play(ReplacementTransform(group_name, nsphere))
+ self.play(FadeInFrom(nsphere_title, UP))
+
+ self.wait(5)
+ self.play(FadeOut(nsphere_title), FadeOut(nsphere))
+
+
+class Geometric3DSymmetries(ThreeDScene):
+ def construct(self):
+ self.improper_rotation()
+ self.icosahedron()
+
+ def improper_rotation(self):
+ # changes the source of the light and camera
+ self.renderer.camera.light_source.move_to(3*IN)
+ self.set_camera_orientation(phi=0, theta=0)
+
+ # initial square
+ square = Square()
+ square.set_fill(PINK, opacity=.5)
+
+ self.play(SpinInFromNothing(square))
+ self.wait(2)
+
+ for i in range(4):
+ self.play(Rotate(square, PI/2))
+ self.wait(.5)
+
+ self.move_camera(phi= 75 * DEGREES, theta = -80 * DEGREES)
+
+ # create sphere from slices
+ cyclic_slices = []
+ for i in range(4):
+ colors = [PINK, RED] if i % 2 == 0 else [BLUE_D, BLUE_E]
+ cyclic_slices.append(ParametricSurface(
+ lambda u, v: np.array([
+ np.sqrt(2) * np.cos(u) * np.cos(v),
+ np.sqrt(2) * np.cos(u) * np.sin(v),
+ np.sqrt(2) * np.sin(u)
+ ]),
+ v_min=PI/4 + PI/2 * i,
+ v_max=PI/4 + PI/2 * (i + 1),
+ u_min=-PI/2, u_max=PI/2,
+ checkerboard_colors=colors, resolution=(10,5)))
+
+ self.play(FadeOut(square), *map(Create, cyclic_slices))
+
+ axis = Line3D(start=[0,0,-2.5], end=[0,0,2.5])
+
+ axis_name = MathTex(r"r \in C_4")
+ # move to yz plane
+ axis_name.rotate(PI/2, axis = RIGHT)
+ axis_name.next_to(axis, OUT)
+
+ self.play(Create(axis))
+ self.play(Write(axis_name))
+ self.wait()
+
+ cyclic_sphere = VGroup(*cyclic_slices)
+ for i in range(4):
+ self.play(Rotate(cyclic_sphere, PI/2))
+ self.wait()
+
+ # reflection plane
+ self.play(FadeOut(cyclic_sphere), FadeIn(square))
+ plane = ParametricSurface(
+ lambda u, v: np.array([u, 0, v]),
+ u_min = -2, u_max = 2,
+ v_min = -2, v_max = 2,
+ fill_opacity=.3, resolution=(1,1))
+
+ plane_name = MathTex(r"\sigma \in D_4")
+ # move to yz plane
+ plane_name.rotate(PI/2, axis = RIGHT)
+ plane_name.next_to(plane, OUT + RIGHT)
+
+ self.play(Create(plane))
+ self.play(Write(plane_name))
+ self.wait()
+
+ self.move_camera(phi = 25 * DEGREES, theta = -75 * DEGREES)
+
+ self.play(Rotate(square, PI/2))
+ self.play(Rotate(square, PI, RIGHT))
+
+ self.play(Rotate(square, PI/2))
+ self.play(Rotate(square, PI, RIGHT))
+
+ self.move_camera(phi = 75 * DEGREES, theta = -80 * DEGREES)
+
+ # create sphere from slices
+ dihedral_slices = []
+ for i in range(4):
+ for j in range(2):
+ colors = [PINK, RED] if i % 2 == 0 else [BLUE_D, BLUE_E]
+ dihedral_slices.append(ParametricSurface(
+ lambda u, v: np.array([
+ np.sqrt(2) * np.cos(u) * np.cos(v),
+ np.sqrt(2) * np.cos(u) * np.sin(v),
+ np.sqrt(2) * np.sin(u)
+ ]),
+ v_min=PI/2 * j + PI/4 + PI/2 * i,
+ v_max=PI/2 * j + PI/4 + PI/2 * (i + 1),
+ u_min=-PI/2 if j == 0 else 0,
+ u_max=0 if j == 0 else PI/2,
+ checkerboard_colors=colors, resolution=(10,5)))
+
+ dihedral_sphere = VGroup(*dihedral_slices)
+
+ self.play(FadeOut(square), Create(dihedral_sphere))
+
+ for i in range(2):
+ self.play(Rotate(dihedral_sphere, PI/2))
+ self.play(Rotate(dihedral_sphere, PI, RIGHT))
+ self.wait()
+
+ self.wait(5)
+
+ def icosahedron(self):
+ pass
+
+
+class AlgebraicSymmetries(Scene):
+ def construct(self):
+ self.cyclic()
+ # self.matrices()
+
+ def cyclic(self):
+ # show the i product
+ product = MathTex(
+ r"1", r"\cdot i &= i \\",
+ r"i \cdot i &= -1 \\",
+ r"-1 \cdot i &= -i \\",
+ r"-i \cdot i &= 1")
+ product.scale(1.5)
+
+ for part in product:
+ self.play(Write(part))
+ self.wait()
+
+ self.play(ApplyMethod(product.scale, 1/1.5))
+
+ # gather in group
+ group = MathTex(r"G = \left\{ 1, i, -1, -i \right\}")
+ self.play(ReplacementTransform(product, group))
+ self.wait(2)
+
+ # show Z4
+ grouppow = MathTex(
+ r"G &= \left\{ 1, i, i^2, i^3 \right\} \\",
+ r"C_4 &= \left\{ \mathbb{1}, r, r^2, r^3 \right\}")
+ self.play(ReplacementTransform(group, grouppow[0]))
+ self.wait(2)
+
+ self.play(Write(grouppow[1]))
+ self.wait()
+ self.play(ApplyMethod(grouppow.to_edge, UP))
+
+ # define morphisms
+ morphism = MathTex(r"\phi: C_4 \to G \\")
+ morphism.shift(UP)
+ self.play(Write(morphism))
+ self.wait()
+
+ # show an example
+ mappings = MathTex(
+ r"\phi(\mathbb{1}) &= 1 \\",
+ r"\phi(r) &= i \\",
+ r"\phi(r^2) &= i^2 \\",
+ r"\phi(r^3) &= i^3 \\")
+ mappings.next_to(morphism, DOWN)
+
+ self.play(Write(mappings))
+ self.wait(3)
+ self.play(FadeOutAndShift(mappings, DOWN))
+
+ # more general definition
+ homomorphism = MathTex(
+ r"\phi(r\circ \mathbb{1}) &= \phi(r)\cdot\phi(\mathbb{1}) \\",
+ r"&= i\cdot 1")
+ homomorphism.next_to(morphism, DOWN).align_to(morphism, LEFT)
+ for part in homomorphism:
+ self.play(Write(part))
+ self.wait()
+
+ hom_bracegrp = VGroup(morphism, homomorphism)
+
+ self.play(
+ ApplyMethod(grouppow.shift, 3 * LEFT),
+ ApplyMethod(hom_bracegrp.shift, 3 * LEFT))
+
+ hom_brace = Brace(hom_bracegrp, direction=RIGHT)
+ hom_text = Tex("Homomorphismus").next_to(hom_brace.get_tip(), RIGHT)
+ hom_text_short = MathTex(r"\mathrm{Hom}(C_4, G)").next_to(hom_brace.get_tip(), RIGHT)
+
+ self.play(Create(hom_brace))
+ self.play(Write(hom_text))
+ self.wait()
+ self.play(ReplacementTransform(hom_text, hom_text_short))
+ self.wait()
+
+ # add the isomorphism part
+ isomorphism = Tex(r"\(\phi\) ist bijektiv")
+ isomorphism.next_to(homomorphism, DOWN).align_to(homomorphism, LEFT)
+ self.play(Write(isomorphism))
+
+ iso_bracegrp = VGroup(hom_bracegrp, isomorphism)
+
+ iso_brace = Brace(iso_bracegrp, RIGHT)
+ iso_text = Tex("Isomorphismus").next_to(iso_brace.get_tip(), RIGHT)
+ iso_text_short = MathTex("C_4 \cong G").next_to(iso_brace.get_tip(), RIGHT)
+
+ self.play(
+ ReplacementTransform(hom_brace, iso_brace),
+ ReplacementTransform(hom_text_short, iso_text))
+ self.wait()
+
+ self.play(ReplacementTransform(iso_text, iso_text_short))
+ self.wait()
+
+ # create a group for the whole
+ morphgrp = VGroup(iso_bracegrp, iso_brace, iso_text_short)
+
+ self.play(
+ ApplyMethod(grouppow.to_edge, LEFT),
+ ApplyMethod(morphgrp.to_edge, LEFT))
+
+ # draw a complex plane
+ plane = ComplexPlane(x_range = [-2.5, 2.5])
+ coordinates = plane.get_coordinate_labels(1, -1, 1j, -1j)
+
+ roots = list(map(lambda p: Dot(p, fill_color=PINK), (
+ [1, 0, 0], [0, 1, 0], [-1, 0, 0], [0, -1, 0]
+ )))
+
+ arrow = CurvedArrow(
+ 1.5 * np.array([m.cos(10 * DEGREES), m.sin(10 * DEGREES), 0]),
+ 1.5 * np.array([m.cos(80 * DEGREES), m.sin(80 * DEGREES), 0]))
+ arrowtext = MathTex("\cdot i")
+ arrowtext.move_to(2 / m.sqrt(2) * (UP + RIGHT))
+
+ square = Square().rotate(PI/4).scale(1/m.sqrt(2))
+ square.set_fill(PINK).set_opacity(.4)
+
+ figuregrp = VGroup(plane, square, arrow, arrowtext, *coordinates, *roots)
+ figuregrp.to_edge(RIGHT)
+
+ self.play(Create(plane))
+ self.play(
+ *map(Create, roots),
+ *map(Write, coordinates))
+ self.wait()
+ self.play(FadeIn(square), Create(arrow), Write(arrowtext))
+
+ for _ in range(4):
+ self.play(Rotate(square, PI/2))
+ self.wait(.5)
+
+ self.play(
+ *map(FadeOut, (square, arrow, arrowtext)),
+ *map(FadeOut, coordinates),
+ *map(FadeOut, roots))
+ self.play(Uncreate(plane))
+ self.play(
+ FadeOutAndShift(grouppow, RIGHT),
+ FadeOutAndShift(morphgrp, RIGHT))
+
+ modulo = MathTex(
+ r"\phi: C_4 &\to (\mathbb{Z}/4\mathbb{Z}, +) \\"
+ r"\phi(\mathbb{1} \circ r^2) &= 0 + 2 \pmod 4").scale(1.5)
+ self.play(Write(modulo))
+ self.wait(2)
+
+ self.play(FadeOut(modulo))
+ self.wait(3)
+
+ def matrices(self):
+ question = MathTex(
+ r"D_n &\cong \,? \\"
+ r"S_n &\cong \,? \\"
+ r"A_n &\cong \,?").scale(1.5)
+
+ answer = MathTex(
+ r"D_n &\cong \,?\\"
+ r"S_4 &\cong \mathrm{Aut}(Q_8) \\"
+ r"A_5 &\cong \mathrm{PSL}_2 (5)").scale(1.5)
+
+ self.play(Write(question))
+ self.wait()
+ self.play(ReplacementTransform(question, answer))
+
+ self.wait(3)
diff --git a/vorlesungen/punktgruppen/media/images/nosignal.jpg b/vorlesungen/punktgruppen/media/images/nosignal.jpg
new file mode 100644
index 0000000..2beeb8b
--- /dev/null
+++ b/vorlesungen/punktgruppen/media/images/nosignal.jpg
Binary files differ
diff --git a/vorlesungen/punktgruppen/poetry.lock b/vorlesungen/punktgruppen/poetry.lock
new file mode 100644
index 0000000..069d270
--- /dev/null
+++ b/vorlesungen/punktgruppen/poetry.lock
@@ -0,0 +1,743 @@
+[[package]]
+name = "certifi"
+version = "2020.12.5"
+description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "chardet"
+version = "4.0.0"
+description = "Universal encoding detector for Python 2 and 3"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "click"
+version = "7.1.2"
+description = "Composable command line interface toolkit"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "click-default-group"
+version = "1.2.2"
+description = "Extends click.Group to invoke a command without explicit subcommand name"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+click = "*"
+
+[[package]]
+name = "cloup"
+version = "0.7.1"
+description = "Option groups and subcommand help sections for pallets/click"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+click = ">=7.0,<9.0"
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "colour"
+version = "0.1.5"
+description = "converts and manipulates various color representation (HSL, RVB, web, X11, ...)"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.extras]
+test = ["nose"]
+
+[[package]]
+name = "commonmark"
+version = "0.9.1"
+description = "Python parser for the CommonMark Markdown spec"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.extras]
+test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
+
+[[package]]
+name = "decorator"
+version = "4.4.2"
+description = "Decorators for Humans"
+category = "main"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*"
+
+[[package]]
+name = "glcontext"
+version = "2.3.3"
+description = "Portable OpenGL Context"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "idna"
+version = "2.10"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "importlib-metadata"
+version = "4.0.1"
+description = "Read metadata from Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "manim"
+version = "0.6.0"
+description = "Animation engine for explanatory math videos."
+category = "main"
+optional = false
+python-versions = ">=3.6.2,<4.0.0"
+
+[package.dependencies]
+click = ">=7.1,<8.0"
+click-default-group = "*"
+cloup = ">=0.7.0,<0.8.0"
+colour = "*"
+decorator = "<5.0.0"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+manimpango = ">=0.2.4,<0.3.0"
+mapbox-earcut = ">=0.12.10,<0.13.0"
+moderngl = ">=5.6.3,<6.0.0"
+moderngl-window = ">=2.3.0,<3.0.0"
+networkx = ">=2.5,<3.0"
+numpy = ">=1.9,<2.0"
+Pillow = "*"
+pycairo = ">=1.19,<2.0"
+pydub = "*"
+pygments = "*"
+requests = "*"
+rich = ">=6.0,<7.0"
+scipy = "*"
+tqdm = "*"
+watchdog = "*"
+
+[package.extras]
+webgl_renderer = ["grpcio (>=1.33.0,<1.34.0)", "grpcio-tools (>=1.33.0,<1.34.0)"]
+jupyterlab = ["jupyterlab (>=3.0,<4.0)"]
+
+[[package]]
+name = "manimpango"
+version = "0.2.6"
+description = "Bindings for Pango for using with Manim."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "mapbox-earcut"
+version = "0.12.10"
+description = "Python bindings for the mapbox earcut C++ polygon triangulation library."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+numpy = "*"
+
+[[package]]
+name = "moderngl"
+version = "5.6.4"
+description = "ModernGL: High performance rendering for Python 3"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+glcontext = ">=2,<3"
+
+[[package]]
+name = "moderngl-window"
+version = "2.3.0"
+description = "A cross platform helper library for ModernGL making window creation and resource loading simple"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+moderngl = "<6"
+numpy = ">=1.16,<2"
+Pillow = ">=5"
+pyglet = ">=1.5.8,<2"
+pyrr = ">=0.10.3,<1"
+
+[package.extras]
+pysdl2 = ["pysdl2"]
+pyside2 = ["PySide2 (<6)"]
+glfw = ["glfw"]
+pygame = ["pygame (==2.0.0.dev10)"]
+pyqt5 = ["pyqt5"]
+pywavefront = ["pywavefront (>=1.2.0,<2)"]
+tk = ["pyopengltk (>=0.0.3)"]
+trimesh = ["trimesh (>=3.2.6,<4)", "scipy (>=1.3.2)"]
+
+[[package]]
+name = "multipledispatch"
+version = "0.6.0"
+description = "Multiple dispatch"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+six = "*"
+
+[[package]]
+name = "networkx"
+version = "2.5.1"
+description = "Python package for creating and manipulating graphs and networks"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+decorator = ">=4.3,<5"
+
+[package.extras]
+all = ["numpy", "scipy", "pandas", "matplotlib", "pygraphviz", "pydot", "pyyaml", "lxml", "pytest"]
+gdal = ["gdal"]
+lxml = ["lxml"]
+matplotlib = ["matplotlib"]
+numpy = ["numpy"]
+pandas = ["pandas"]
+pydot = ["pydot"]
+pygraphviz = ["pygraphviz"]
+pytest = ["pytest"]
+pyyaml = ["pyyaml"]
+scipy = ["scipy"]
+
+[[package]]
+name = "numpy"
+version = "1.20.2"
+description = "NumPy is the fundamental package for array computing with Python."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "pillow"
+version = "8.2.0"
+description = "Python Imaging Library (Fork)"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "pycairo"
+version = "1.20.0"
+description = "Python interface for cairo"
+category = "main"
+optional = false
+python-versions = ">=3.6, <4"
+
+[[package]]
+name = "pydub"
+version = "0.25.1"
+description = "Manipulate audio with an simple and easy high level interface"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pyglet"
+version = "1.5.16"
+description = "Cross-platform windowing and multimedia library"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pygments"
+version = "2.9.0"
+description = "Pygments is a syntax highlighting package written in Python."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "pyrr"
+version = "0.10.3"
+description = "3D mathematical functions using NumPy"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+multipledispatch = "*"
+numpy = "*"
+
+[[package]]
+name = "requests"
+version = "2.25.1"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+chardet = ">=3.0.2,<5"
+idna = ">=2.5,<3"
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
+
+[[package]]
+name = "rich"
+version = "6.2.0"
+description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
+category = "main"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[package.dependencies]
+colorama = ">=0.4.0,<0.5.0"
+commonmark = ">=0.9.0,<0.10.0"
+pygments = ">=2.6.0,<3.0.0"
+typing-extensions = ">=3.7.4,<4.0.0"
+
+[package.extras]
+jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"]
+
+[[package]]
+name = "scipy"
+version = "1.6.1"
+description = "SciPy: Scientific Library for Python"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+numpy = ">=1.16.5"
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "tqdm"
+version = "4.60.0"
+description = "Fast, Extensible Progress Meter"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+
+[package.extras]
+dev = ["py-make (>=0.1.0)", "twine", "wheel"]
+notebook = ["ipywidgets (>=6)"]
+telegram = ["requests"]
+
+[[package]]
+name = "typing-extensions"
+version = "3.10.0.0"
+description = "Backported and Experimental Type Hints for Python 3.5+"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "urllib3"
+version = "1.26.4"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+brotli = ["brotlipy (>=0.6.0)"]
+
+[[package]]
+name = "watchdog"
+version = "2.1.0"
+description = "Filesystem events monitoring"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"]
+
+[[package]]
+name = "zipp"
+version = "3.4.1"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.7"
+content-hash = "2d2a6db16cffc7cb06ce7290ad490f9555d4d7172f11fd77783e7a1f4fd933ed"
+
+[metadata.files]
+certifi = [
+ {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"},
+ {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"},
+]
+chardet = [
+ {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
+ {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
+]
+click = [
+ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
+ {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+]
+click-default-group = [
+ {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"},
+]
+cloup = [
+ {file = "cloup-0.7.1-py2.py3-none-any.whl", hash = "sha256:947c881ada77ea2f7b2876f7b5bb2fc7e5406daac5a045342acf8de35bcce5d7"},
+ {file = "cloup-0.7.1.tar.gz", hash = "sha256:f26cc500dda4e4c9444ac1008b82376df8d72ecfa43a6310a9b3d54ef98add7b"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+colour = [
+ {file = "colour-0.1.5-py2.py3-none-any.whl", hash = "sha256:33f6db9d564fadc16e59921a56999b79571160ce09916303d35346dddc17978c"},
+ {file = "colour-0.1.5.tar.gz", hash = "sha256:af20120fefd2afede8b001fbef2ea9da70ad7d49fafdb6489025dae8745c3aee"},
+]
+commonmark = [
+ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"},
+ {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
+]
+decorator = [
+ {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"},
+ {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"},
+]
+glcontext = [
+ {file = "glcontext-2.3.3-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:f518379551a2b60d45c1eec23759cb1ee85517d4b943fc31530b6ab13e304fe4"},
+ {file = "glcontext-2.3.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:d3a8fbc27f43766d168bae02474790459f4050adeb25832ff0a227cc5006c933"},
+ {file = "glcontext-2.3.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:aa1d9e4f9bd6eda3d195f39c47c849b3721caf65813a4ad1e006a20fa02d33e4"},
+ {file = "glcontext-2.3.3-cp35-cp35m-win32.whl", hash = "sha256:8b4ee9cb5573e2ae313e1681fdfe2c5ac5b8780b20e857daf8f95e318c36aa2f"},
+ {file = "glcontext-2.3.3-cp35-cp35m-win_amd64.whl", hash = "sha256:b92ca447a04c3a05afb3974a6e94f584e60f55444c3e55ecd31fbfacad6ee07a"},
+ {file = "glcontext-2.3.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b102a00e7bbce03a5e8bb02692197f96fcb77c51dbe133859b70afa361eef5b7"},
+ {file = "glcontext-2.3.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:ea3975a9d86a97b49f9524713c8e3f0df92044715cfbe5a24102e10762673b23"},
+ {file = "glcontext-2.3.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5f2e7fb61ea1f69c44db0799f8929ea66ad207619c18063ae60cfb26ad0f447f"},
+ {file = "glcontext-2.3.3-cp36-cp36m-win32.whl", hash = "sha256:bf8c3fa5f3a8962c9bcc03a869a0bb178bd1681619225b9f0a070a65ff3f766d"},
+ {file = "glcontext-2.3.3-cp36-cp36m-win_amd64.whl", hash = "sha256:e0b637f2ac1c2dd1e0dbfcbad6d7be2dae75290f9af8f82aa67aa55b977766e1"},
+ {file = "glcontext-2.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2002d29dee90e9ba800c8699e13e1ff8b0fa1292a7c5bb0a98ef50b5f6cd3f14"},
+ {file = "glcontext-2.3.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:941be8972ad64e70080ad4702c037c64c09d1378ddd9b1b4576b957bc2d7f1c2"},
+ {file = "glcontext-2.3.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0eb69c4add7f724017169bcefc2a8ef8ce053183e9384cc4770162e934090592"},
+ {file = "glcontext-2.3.3-cp37-cp37m-win32.whl", hash = "sha256:f63aed2116907225f7392921df790a391fd1a843cd1af0756dcd533e9d3ecf2b"},
+ {file = "glcontext-2.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2fa9b939c15f5f7e63110a1021e8d20341c03921b8d3aebbb4bb191f11414d86"},
+ {file = "glcontext-2.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:44f95953bbd6a26caa9489b4f838b106470ede432c5ef837cd3e0d3657ca2a06"},
+ {file = "glcontext-2.3.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:843d3361bf46aec487f268bb7f680700166640995a82424fa86e53f428dc43ae"},
+ {file = "glcontext-2.3.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:be3e25a8595976699b6d30a2619ca4faf7bd5e60ff38dcd4445fa38a8f3b2cf9"},
+ {file = "glcontext-2.3.3-cp38-cp38-win32.whl", hash = "sha256:7abbd227bf9e4e62ec196360fa0f440143a66b7aae3d3deb7960b87aac654043"},
+ {file = "glcontext-2.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:b91010d033789d1f876789e4aa4e6498e87cd284b4d0cb7a4aa1b7e620caaf57"},
+ {file = "glcontext-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0a851f569f165a13f8fedf60dd4f2831f7c2ffbb9bc9f867d6e0e3fdd1846c8d"},
+ {file = "glcontext-2.3.3-cp39-cp39-win32.whl", hash = "sha256:f36935ba84e8c52ed22bb9f683875bdf1690abd318ae704f40511f1afca5f71a"},
+ {file = "glcontext-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:69e3a04c677e4925c0b6daf5efc5469a86d0982b05bb1d0ca29bce57f4aaf7d1"},
+ {file = "glcontext-2.3.3.tar.gz", hash = "sha256:f86a6c4ad99f941623911f964da74c443dc3f833fac7eb03cd485fae82acb80c"},
+]
+idna = [
+ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
+ {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
+]
+importlib-metadata = [
+ {file = "importlib_metadata-4.0.1-py3-none-any.whl", hash = "sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d"},
+ {file = "importlib_metadata-4.0.1.tar.gz", hash = "sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581"},
+]
+manim = [
+ {file = "manim-0.6.0-py3-none-any.whl", hash = "sha256:402cb91b5a472204491086ca079163dcefdc491acb0559c098156b08f4e62d8b"},
+ {file = "manim-0.6.0.tar.gz", hash = "sha256:08bd27389f58312ab6d994e3a2910e77fa668c867c06da67135efe637f81c4a1"},
+]
+manimpango = [
+ {file = "ManimPango-0.2.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2a2d0ba8ca06e761650076a0e0050743acb2f1fb163f9b7db52decf95d91ced8"},
+ {file = "ManimPango-0.2.6-cp36-cp36m-win32.whl", hash = "sha256:05c1d1af85d2016819f4ce40758d0ef6564baa121238ef6a88240ad96220a7a8"},
+ {file = "ManimPango-0.2.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ed9cc957df9513d31b450acdb8f9bc76885ed5eae1a71d71e939c3133c14eb09"},
+ {file = "ManimPango-0.2.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e094d1f136f99408bb10bf4748ee6b51efba68e54e310096e75a8d38bb7ef111"},
+ {file = "ManimPango-0.2.6-cp37-cp37m-win32.whl", hash = "sha256:b2062fac21e968930cb91945a8bfcf4593a3152f8bea5d6950c6aa304eb831a7"},
+ {file = "ManimPango-0.2.6-cp37-cp37m-win_amd64.whl", hash = "sha256:76d1ab6c131389e91cc84e0d3c4f746978cd301237ddd1e463f9463ff872d17f"},
+ {file = "ManimPango-0.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88bdd9c2714b94ee85da28002fd28122e4b26cb7ef74a48fe93d50cb06e8a35b"},
+ {file = "ManimPango-0.2.6-cp38-cp38-win32.whl", hash = "sha256:28165fd23d8cfe7e260affa8d240d63bf66808f96154507ba534548b47834208"},
+ {file = "ManimPango-0.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:e74690f948c5fe2cc5e13f22683c1875155fee4a4a75c4e24ce1dc6e4f9f9883"},
+ {file = "ManimPango-0.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2297b1c829cfff6d91f5d32a7a8e903e30d0b28be8006e9f61fd653981ce7827"},
+ {file = "ManimPango-0.2.6-cp39-cp39-win32.whl", hash = "sha256:de974e2435d445b1244a713b7b6ce4383bc6c574e0a1b59a6f33b8a16d1a147e"},
+ {file = "ManimPango-0.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:59a575fb28183fe68f3d8f5e93c98b7afa8e495eb0124ec09c660eef15adfcbb"},
+ {file = "ManimPango-0.2.6.tar.gz", hash = "sha256:64028b62b151bc80b047cc1757b27943498416dc4a85f073892a524b4d90ab41"},
+]
+mapbox-earcut = [
+ {file = "mapbox_earcut-0.12.10-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:2aaf7bdb002d36d38d1412088329a9176de3fcadc24a53951b76e49a27e34d78"},
+ {file = "mapbox_earcut-0.12.10-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddda755c63cf5f9bff338cd375e4e937035898827fef960102e2f4c8984cb068"},
+ {file = "mapbox_earcut-0.12.10-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3475382dd573986d0dfe3f6b6fd3b1f576e74af7fd7d95066d2506ce8f4b38e5"},
+ {file = "mapbox_earcut-0.12.10-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f2b9079df53258766c3108a1c46a7942963c26f216f9bc2d216f93eeed1da76c"},
+ {file = "mapbox_earcut-0.12.10-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:124cc27486d0e9c9b185a6d80e551e736e2bc81d28e077e297ac39980c14e588"},
+ {file = "mapbox_earcut-0.12.10-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:04228ff704d5edc49d71ba3fd07c4a8621a4f416d2ad5c2504a80d0cabd51c18"},
+ {file = "mapbox_earcut-0.12.10-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:9a15cb52f3f6d5980e41b6ca31976cc2048acf290f2e5159d7527e16e5c5d748"},
+ {file = "mapbox_earcut-0.12.10-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:6b083a065afd40961cc311b425c54275f531d91a27bdd34a2049993a68d8a651"},
+ {file = "mapbox_earcut-0.12.10-cp35-cp35m-win32.whl", hash = "sha256:fa3355248d3beaab67438373315e55a37ecc2694a4a4b1965e9d8f582a210479"},
+ {file = "mapbox_earcut-0.12.10-cp35-cp35m-win_amd64.whl", hash = "sha256:90b2977a9eda2a1873e44d7821ecf3b18062aa0878e957cb306e6018aba105c9"},
+ {file = "mapbox_earcut-0.12.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:553688de45e73fa7d192fd6c29b87a4c5ea60a728b3c7b4c5f1715a89e6a8e54"},
+ {file = "mapbox_earcut-0.12.10-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:498b7f35c6a7c5c25829bcf1a79015ae64e94e8e36b84bd06e93131352b409f0"},
+ {file = "mapbox_earcut-0.12.10-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:8b9c6147249edf5049ccf7a7bca5bb29c9d512b3a5b62510659cfc51f1b8f806"},
+ {file = "mapbox_earcut-0.12.10-cp36-cp36m-win32.whl", hash = "sha256:4eaf2a9e86bbf808bf045eb587ec93a393e9d75ab87e7c1c9c8a5d9e122e30ac"},
+ {file = "mapbox_earcut-0.12.10-cp36-cp36m-win_amd64.whl", hash = "sha256:cb82e4ea9a67a9cdd46c9fc39bcb24e11f49569010368f9c5d376489bb2d0317"},
+ {file = "mapbox_earcut-0.12.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:619a31a4d9748a30fbea82fd45beec6ab9e7f8a7ae7818be46f09d03ea0d9185"},
+ {file = "mapbox_earcut-0.12.10-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:054cd56cf8adf179d0aa0e8a061774e5afa767aaf6507851f4d2731b58f03d43"},
+ {file = "mapbox_earcut-0.12.10-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:ebeef32d504bf7e1ba986f86d87a8d3c96a54b6e03b0535ccdf0ce8f2f56e563"},
+ {file = "mapbox_earcut-0.12.10-cp37-cp37m-win32.whl", hash = "sha256:62a8787e30f7bbc6e1ebe8b11591119ed85aa5044b2cf3f6afb058e6fffeb8a3"},
+ {file = "mapbox_earcut-0.12.10-cp37-cp37m-win_amd64.whl", hash = "sha256:5f854a887f854bdea62c4b58785b82cf70056d53dc3bf23146ce68c125ceed96"},
+ {file = "mapbox_earcut-0.12.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f16be13a40d20419362f8ce27cf2dca8f0b8f4c7caa24caaff8351bcdf853e"},
+ {file = "mapbox_earcut-0.12.10-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:cac7c8c332d1e802f478b5b79166ab38005b6d1bd908fb96857a8941e702f70d"},
+ {file = "mapbox_earcut-0.12.10-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:24cc595987932b5d47b93ddb733c6bd084d91ff0af66ff2205aa717f0a5a13b8"},
+ {file = "mapbox_earcut-0.12.10-cp38-cp38-win32.whl", hash = "sha256:fe4b4e1c53fe0fde8e5fee86d868344f47d4d9fd89d9599548ea4b98349f10d6"},
+ {file = "mapbox_earcut-0.12.10-cp38-cp38-win_amd64.whl", hash = "sha256:6f4601b949ab43cf21dca86ffb6b4e2b30974ab3112f089d16b5f365e8b446f4"},
+ {file = "mapbox_earcut-0.12.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ca00bdcb162b6a543f3061f49e2dcde42d6b780a545b5054da437e4ff5e33905"},
+ {file = "mapbox_earcut-0.12.10-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:031132cdfa4d20e640f24d6817b65a91e3292c34ed527b4309617c9992284133"},
+ {file = "mapbox_earcut-0.12.10-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f284c0fc7f3c84664e9dddabae4eae729e6458e96ec5f30c9d7000c9b0dadca7"},
+ {file = "mapbox_earcut-0.12.10-cp39-cp39-win32.whl", hash = "sha256:c94a263767a841a5f7e8f03c725bdf41c87b8936c1a5fe18a5a77f3b9344d68f"},
+ {file = "mapbox_earcut-0.12.10-cp39-cp39-win_amd64.whl", hash = "sha256:742bd1f94113f44f1adcb5f3e2dca6e288695645b7eeab5d94f589dacda092af"},
+ {file = "mapbox_earcut-0.12.10-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:ad76defd6188e71023e43e5aed32ab5d540c0452a74918fc5de9bcccdee6c053"},
+ {file = "mapbox_earcut-0.12.10-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:a3a9a81f696627f3c331f16c8d628b494949fa68067a42d2f1a6a56ee115eb0d"},
+ {file = "mapbox_earcut-0.12.10-pp27-pypy_73-win32.whl", hash = "sha256:044f70ed230bdb94f08356ec84f4bd30e4ea493d63700c3cc6fa86c5cf57623e"},
+ {file = "mapbox_earcut-0.12.10-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e352482e6022cc113dd008886012f0966bd2511933f888805fa87f070423d5b1"},
+ {file = "mapbox_earcut-0.12.10-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:41a282c485e96135ff15c01e0e1eb334cf1a05235edde8154b7b6e30187e54f4"},
+ {file = "mapbox_earcut-0.12.10-pp36-pypy36_pp73-win32.whl", hash = "sha256:5e1e3cf5a881eafeba7a7e5c4b1b9e7376710c48513513894e2a082ebf870326"},
+ {file = "mapbox_earcut-0.12.10-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7b6c2bfc28dc82a27071079885ffbe0836c0ad5dbd4ab47a5edaa24a86218daf"},
+ {file = "mapbox_earcut-0.12.10-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:6e6614f7b437b4b0a69ab642cf35569079408ac25c193013d5ad26e82c71fc01"},
+ {file = "mapbox_earcut-0.12.10-pp37-pypy37_pp73-win32.whl", hash = "sha256:d016823e863309b9cc542bb1d3bcdc274ec65fb23f2566de298188dcd4a75c0e"},
+ {file = "mapbox_earcut-0.12.10.tar.gz", hash = "sha256:50d995673ac9ce8cb9abb7ab64b709d611c1d27557907e00b631b5272345c453"},
+]
+moderngl = [
+ {file = "moderngl-5.6.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:bc3764d67f037b67051871345a1d0b7a3d2c19cb5c0c0af0a84c532e802d6642"},
+ {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:90006d9dfd5333da604a7d26b2a5e70e1a570f291cd745b8bf80e4833d8821b6"},
+ {file = "moderngl-5.6.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:af44437545380a840dafd09658eb56592831dbd4fb481d320249d0d42c591bae"},
+ {file = "moderngl-5.6.4-cp35-cp35m-win32.whl", hash = "sha256:b5023633bcbfbab90be6a6f4edcde75f9c1e244d9acbda94678f3e3fb238b363"},
+ {file = "moderngl-5.6.4-cp35-cp35m-win_amd64.whl", hash = "sha256:ffc48fc4deeb525ed33a828d13ca4c12c5af8e5cb0449011f1802e18b5fc3c25"},
+ {file = "moderngl-5.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:331fd4bce60b10a08eed81a3ed4c70b7c297c38f981fdf3968d03a1c892af247"},
+ {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1bd864b5cc2fc1255785e33575cec98fa5ded698503c4f8f3fa9230abeaa3a04"},
+ {file = "moderngl-5.6.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b22534529f5bc52c1fe43336787c06d51123ae978fb56e74e47cabd85056c934"},
+ {file = "moderngl-5.6.4-cp36-cp36m-win32.whl", hash = "sha256:ee5b1eced39d7f6dc68782c2abf01c1130a40b6d83d333d175ee71adbea7c721"},
+ {file = "moderngl-5.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:52ee915a559762f0e992344961b35e0d241be32f8aa7464494e958f777e0534c"},
+ {file = "moderngl-5.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f83f6ab1fafdba2d9c06a7a1c8a4e460689ea1d514146606acc74f14e0831d93"},
+ {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c350e06affea9fabc636b2350cf6e58d83ee2e7264527eee0f5d142c167f5463"},
+ {file = "moderngl-5.6.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eb65afc8ec4a1d4a4c48696fb0f4f6cf7a7ada6bef97818d717dbca73c57b11"},
+ {file = "moderngl-5.6.4-cp37-cp37m-win32.whl", hash = "sha256:4fd721eb83e73d34c3f7b5a11aec656fef461b51bbe7503b07ea27370c593cbd"},
+ {file = "moderngl-5.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:01c71d94dbd59b5d37ead463991e2998c0924426cffa393b9da2b8334551c998"},
+ {file = "moderngl-5.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2ec6ecd845f21ba44a08c11521cb71f2a9c2ea2ec189b7ed30d17837d392d70"},
+ {file = "moderngl-5.6.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:40f74a2246e5302f93f2d46f76c0d2a26cbed1eb29731674c4052476f1e9c9ea"},
+ {file = "moderngl-5.6.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5e158e6881034c7e1d0c583d7c82ff608439606f2359dc6098e4be4fd93cef9d"},
+ {file = "moderngl-5.6.4-cp38-cp38-win32.whl", hash = "sha256:a28dc741469eeb69549ee85b4ddbf8e9cfca6a2b19ce0406df9fde20f78082c8"},
+ {file = "moderngl-5.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:ce87962b91635d857cac4a753c5d5f647d94dc66dcb0f090bb8d758fd226c3e8"},
+ {file = "moderngl-5.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fb139bcdd25eae2c546e5788e9d8719f6c4b18a2ba68a9df31699b4ac57d62d"},
+ {file = "moderngl-5.6.4-cp39-cp39-win32.whl", hash = "sha256:fc5cc1601a3df8f45f1901c6b9960731e0619d1781b0d036e12341fbf2ef55d3"},
+ {file = "moderngl-5.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1c74b71c9acee9f0e69807a086d76e92f37c1960c3bb1d6a6e2472fd03f7be5b"},
+ {file = "moderngl-5.6.4.tar.gz", hash = "sha256:8c6d04559f5e3bf75a18525cd46d213c0f3a8409363718978e6de691bdb551fb"},
+]
+moderngl-window = [
+ {file = "moderngl_window-2.3.0-py3-none-any.whl", hash = "sha256:79056e6b6a1e8c540031166d2ec308a40806baf461e5d492730966c3cf372a31"},
+]
+multipledispatch = [
+ {file = "multipledispatch-0.6.0-py2-none-any.whl", hash = "sha256:407e6d8c5fa27075968ba07c4db3ef5f02bea4e871e959570eeb69ee39a6565b"},
+ {file = "multipledispatch-0.6.0-py3-none-any.whl", hash = "sha256:a55c512128fb3f7c2efd2533f2550accb93c35f1045242ef74645fc92a2c3cba"},
+ {file = "multipledispatch-0.6.0.tar.gz", hash = "sha256:a7ab1451fd0bf9b92cab3edbd7b205622fb767aeefb4fb536c2e3de9e0a38bea"},
+]
+networkx = [
+ {file = "networkx-2.5.1-py3-none-any.whl", hash = "sha256:0635858ed7e989f4c574c2328380b452df892ae85084144c73d8cd819f0c4e06"},
+ {file = "networkx-2.5.1.tar.gz", hash = "sha256:109cd585cac41297f71103c3c42ac6ef7379f29788eb54cb751be5a663bb235a"},
+]
+numpy = [
+ {file = "numpy-1.20.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e9459f40244bb02b2f14f6af0cd0732791d72232bbb0dc4bab57ef88e75f6935"},
+ {file = "numpy-1.20.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a8e6859913ec8eeef3dbe9aed3bf475347642d1cdd6217c30f28dee8903528e6"},
+ {file = "numpy-1.20.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:9cab23439eb1ebfed1aaec9cd42b7dc50fc96d5cd3147da348d9161f0501ada5"},
+ {file = "numpy-1.20.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9c0fab855ae790ca74b27e55240fe4f2a36a364a3f1ebcfd1fb5ac4088f1cec3"},
+ {file = "numpy-1.20.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:61d5b4cf73622e4d0c6b83408a16631b670fc045afd6540679aa35591a17fe6d"},
+ {file = "numpy-1.20.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d15007f857d6995db15195217afdbddfcd203dfaa0ba6878a2f580eaf810ecd6"},
+ {file = "numpy-1.20.2-cp37-cp37m-win32.whl", hash = "sha256:d76061ae5cab49b83a8cf3feacefc2053fac672728802ac137dd8c4123397677"},
+ {file = "numpy-1.20.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bad70051de2c50b1a6259a6df1daaafe8c480ca98132da98976d8591c412e737"},
+ {file = "numpy-1.20.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:719656636c48be22c23641859ff2419b27b6bdf844b36a2447cb39caceb00935"},
+ {file = "numpy-1.20.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:aa046527c04688af680217fffac61eec2350ef3f3d7320c07fd33f5c6e7b4d5f"},
+ {file = "numpy-1.20.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2428b109306075d89d21135bdd6b785f132a1f5a3260c371cee1fae427e12727"},
+ {file = "numpy-1.20.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:e8e4fbbb7e7634f263c5b0150a629342cc19b47c5eba8d1cd4363ab3455ab576"},
+ {file = "numpy-1.20.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:edb1f041a9146dcf02cd7df7187db46ab524b9af2515f392f337c7cbbf5b52cd"},
+ {file = "numpy-1.20.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:c73a7975d77f15f7f68dacfb2bca3d3f479f158313642e8ea9058eea06637931"},
+ {file = "numpy-1.20.2-cp38-cp38-win32.whl", hash = "sha256:6c915ee7dba1071554e70a3664a839fbc033e1d6528199d4621eeaaa5487ccd2"},
+ {file = "numpy-1.20.2-cp38-cp38-win_amd64.whl", hash = "sha256:471c0571d0895c68da309dacee4e95a0811d0a9f9f532a48dc1bea5f3b7ad2b7"},
+ {file = "numpy-1.20.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4703b9e937df83f5b6b7447ca5912b5f5f297aba45f91dbbbc63ff9278c7aa98"},
+ {file = "numpy-1.20.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:abc81829c4039e7e4c30f7897938fa5d4916a09c2c7eb9b244b7a35ddc9656f4"},
+ {file = "numpy-1.20.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:377751954da04d4a6950191b20539066b4e19e3b559d4695399c5e8e3e683bf6"},
+ {file = "numpy-1.20.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:6e51e417d9ae2e7848314994e6fc3832c9d426abce9328cf7571eefceb43e6c9"},
+ {file = "numpy-1.20.2-cp39-cp39-win32.whl", hash = "sha256:780ae5284cb770ade51d4b4a7dce4faa554eb1d88a56d0e8b9f35fca9b0270ff"},
+ {file = "numpy-1.20.2-cp39-cp39-win_amd64.whl", hash = "sha256:924dc3f83de20437de95a73516f36e09918e9c9c18d5eac520062c49191025fb"},
+ {file = "numpy-1.20.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:97ce8b8ace7d3b9288d88177e66ee75480fb79b9cf745e91ecfe65d91a856042"},
+ {file = "numpy-1.20.2.zip", hash = "sha256:878922bf5ad7550aa044aa9301d417e2d3ae50f0f577de92051d739ac6096cee"},
+]
+pillow = [
+ {file = "Pillow-8.2.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:dc38f57d8f20f06dd7c3161c59ca2c86893632623f33a42d592f097b00f720a9"},
+ {file = "Pillow-8.2.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a013cbe25d20c2e0c4e85a9daf438f85121a4d0344ddc76e33fd7e3965d9af4b"},
+ {file = "Pillow-8.2.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8bb1e155a74e1bfbacd84555ea62fa21c58e0b4e7e6b20e4447b8d07990ac78b"},
+ {file = "Pillow-8.2.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c5236606e8570542ed424849f7852a0ff0bce2c4c8d0ba05cc202a5a9c97dee9"},
+ {file = "Pillow-8.2.0-cp36-cp36m-win32.whl", hash = "sha256:12e5e7471f9b637762453da74e390e56cc43e486a88289995c1f4c1dc0bfe727"},
+ {file = "Pillow-8.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5afe6b237a0b81bd54b53f835a153770802f164c5570bab5e005aad693dab87f"},
+ {file = "Pillow-8.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:cb7a09e173903541fa888ba010c345893cd9fc1b5891aaf060f6ca77b6a3722d"},
+ {file = "Pillow-8.2.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0d19d70ee7c2ba97631bae1e7d4725cdb2ecf238178096e8c82ee481e189168a"},
+ {file = "Pillow-8.2.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:083781abd261bdabf090ad07bb69f8f5599943ddb539d64497ed021b2a67e5a9"},
+ {file = "Pillow-8.2.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c6b39294464b03457f9064e98c124e09008b35a62e3189d3513e5148611c9388"},
+ {file = "Pillow-8.2.0-cp37-cp37m-win32.whl", hash = "sha256:01425106e4e8cee195a411f729cff2a7d61813b0b11737c12bd5991f5f14bcd5"},
+ {file = "Pillow-8.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3b570f84a6161cf8865c4e08adf629441f56e32f180f7aa4ccbd2e0a5a02cba2"},
+ {file = "Pillow-8.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:031a6c88c77d08aab84fecc05c3cde8414cd6f8406f4d2b16fed1e97634cc8a4"},
+ {file = "Pillow-8.2.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:66cc56579fd91f517290ab02c51e3a80f581aba45fd924fcdee01fa06e635812"},
+ {file = "Pillow-8.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c32cc3145928c4305d142ebec682419a6c0a8ce9e33db900027ddca1ec39178"},
+ {file = "Pillow-8.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:624b977355cde8b065f6d51b98497d6cd5fbdd4f36405f7a8790e3376125e2bb"},
+ {file = "Pillow-8.2.0-cp38-cp38-win32.whl", hash = "sha256:5cbf3e3b1014dddc45496e8cf38b9f099c95a326275885199f427825c6522232"},
+ {file = "Pillow-8.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:463822e2f0d81459e113372a168f2ff59723e78528f91f0bd25680ac185cf797"},
+ {file = "Pillow-8.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:95d5ef984eff897850f3a83883363da64aae1000e79cb3c321915468e8c6add5"},
+ {file = "Pillow-8.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b91c36492a4bbb1ee855b7d16fe51379e5f96b85692dc8210831fbb24c43e484"},
+ {file = "Pillow-8.2.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d68cb92c408261f806b15923834203f024110a2e2872ecb0bd2a110f89d3c602"},
+ {file = "Pillow-8.2.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f217c3954ce5fd88303fc0c317af55d5e0204106d86dea17eb8205700d47dec2"},
+ {file = "Pillow-8.2.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5b70110acb39f3aff6b74cf09bb4169b167e2660dabc304c1e25b6555fa781ef"},
+ {file = "Pillow-8.2.0-cp39-cp39-win32.whl", hash = "sha256:a7d5e9fad90eff8f6f6106d3b98b553a88b6f976e51fce287192a5d2d5363713"},
+ {file = "Pillow-8.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:238c197fc275b475e87c1453b05b467d2d02c2915fdfdd4af126145ff2e4610c"},
+ {file = "Pillow-8.2.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0e04d61f0064b545b989126197930807c86bcbd4534d39168f4aa5fda39bb8f9"},
+ {file = "Pillow-8.2.0-pp36-pypy36_pp73-manylinux2010_i686.whl", hash = "sha256:63728564c1410d99e6d1ae8e3b810fe012bc440952168af0a2877e8ff5ab96b9"},
+ {file = "Pillow-8.2.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:c03c07ed32c5324939b19e36ae5f75c660c81461e312a41aea30acdd46f93a7c"},
+ {file = "Pillow-8.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:4d98abdd6b1e3bf1a1cbb14c3895226816e666749ac040c4e2554231068c639b"},
+ {file = "Pillow-8.2.0-pp37-pypy37_pp73-manylinux2010_i686.whl", hash = "sha256:aac00e4bc94d1b7813fe882c28990c1bc2f9d0e1aa765a5f2b516e8a6a16a9e4"},
+ {file = "Pillow-8.2.0-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:22fd0f42ad15dfdde6c581347eaa4adb9a6fc4b865f90b23378aa7914895e120"},
+ {file = "Pillow-8.2.0-pp37-pypy37_pp73-win32.whl", hash = "sha256:e98eca29a05913e82177b3ba3d198b1728e164869c613d76d0de4bde6768a50e"},
+ {file = "Pillow-8.2.0.tar.gz", hash = "sha256:a787ab10d7bb5494e5f76536ac460741788f1fbce851068d73a87ca7c35fc3e1"},
+]
+pycairo = [
+ {file = "pycairo-1.20.0-cp36-cp36m-win32.whl", hash = "sha256:e5a3433690c473e073a9917dc8f1fc7dc8b9af7b201bf372894b8ad70d960c6d"},
+ {file = "pycairo-1.20.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a942614923b88ae75c794506d5c426fba9c46a055d3fdd3b8db7046b75c079cc"},
+ {file = "pycairo-1.20.0-cp37-cp37m-win32.whl", hash = "sha256:8cfa9578b745fb9cf2915ec580c2c50ebc2da00eac2cf4c4b54b63aa19da4b77"},
+ {file = "pycairo-1.20.0-cp37-cp37m-win_amd64.whl", hash = "sha256:273a33c56aba724ec42fe1d8f94c86c2e2660c1277470be9b04e5113d7c5b72d"},
+ {file = "pycairo-1.20.0-cp38-cp38-win32.whl", hash = "sha256:2088100a099c09c5e90bf247409ce6c98f51766b53bd13f96d6aac7addaa3e66"},
+ {file = "pycairo-1.20.0-cp38-cp38-win_amd64.whl", hash = "sha256:ceb1edcbeb48dabd5fbbdff2e4b429aa88ddc493d6ebafe78d94b050ac0749e2"},
+ {file = "pycairo-1.20.0-cp39-cp39-win32.whl", hash = "sha256:57a768f4edc8a9890d98070dd473a812ac3d046cef4bc1c817d68024dab9a9b4"},
+ {file = "pycairo-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:57166119e424d71eccdba6b318bd731bdabd17188e2ba10d4f315f7bf16ace3f"},
+ {file = "pycairo-1.20.0.tar.gz", hash = "sha256:5695a10cb7f9ae0d01f665b56602a845b0a8cb17e2123bfece10c2e58552468c"},
+]
+pydub = [
+ {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"},
+ {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"},
+]
+pyglet = [
+ {file = "pyglet-1.5.16-py3-none-any.whl", hash = "sha256:37cced6f4f7e30e7ace73779d068c86b3dc26f1a28b602016d37113ae830d7f8"},
+ {file = "pyglet-1.5.16.zip", hash = "sha256:ad4a02d6fbebdaa748f8af6d2d388d64d446b6ccdfb9c0d7dfd49d7164913400"},
+]
+pygments = [
+ {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"},
+ {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"},
+]
+pyrr = [
+ {file = "pyrr-0.10.3-py3-none-any.whl", hash = "sha256:d8af23fb9bb29262405845e1c98f7339fbba5e49323b98528bd01160a75c65ac"},
+ {file = "pyrr-0.10.3.tar.gz", hash = "sha256:3c0f7b20326e71f706a610d58f2190fff73af01eef60c19cb188b186f0ec7e1d"},
+]
+requests = [
+ {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"},
+ {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"},
+]
+rich = [
+ {file = "rich-6.2.0-py3-none-any.whl", hash = "sha256:fa55d5d6ba9a0df1f1c95518891b57b13f1d45548a9a198a87b093fceee513ec"},
+ {file = "rich-6.2.0.tar.gz", hash = "sha256:f99c877277906e1ff83b135c564920590ba31188f424dcdb5d1cae652a519b4b"},
+]
+scipy = [
+ {file = "scipy-1.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a15a1f3fc0abff33e792d6049161b7795909b40b97c6cc2934ed54384017ab76"},
+ {file = "scipy-1.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e79570979ccdc3d165456dd62041d9556fb9733b86b4b6d818af7a0afc15f092"},
+ {file = "scipy-1.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a423533c55fec61456dedee7b6ee7dce0bb6bfa395424ea374d25afa262be261"},
+ {file = "scipy-1.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:33d6b7df40d197bdd3049d64e8e680227151673465e5d85723b3b8f6b15a6ced"},
+ {file = "scipy-1.6.1-cp37-cp37m-win32.whl", hash = "sha256:6725e3fbb47da428794f243864f2297462e9ee448297c93ed1dcbc44335feb78"},
+ {file = "scipy-1.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:5fa9c6530b1661f1370bcd332a1e62ca7881785cc0f80c0d559b636567fab63c"},
+ {file = "scipy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd50daf727f7c195e26f27467c85ce653d41df4358a25b32434a50d8870fc519"},
+ {file = "scipy-1.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:f46dd15335e8a320b0fb4685f58b7471702234cba8bb3442b69a3e1dc329c345"},
+ {file = "scipy-1.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0e5b0ccf63155d90da576edd2768b66fb276446c371b73841e3503be1d63fb5d"},
+ {file = "scipy-1.6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2481efbb3740977e3c831edfd0bd9867be26387cacf24eb5e366a6a374d3d00d"},
+ {file = "scipy-1.6.1-cp38-cp38-win32.whl", hash = "sha256:68cb4c424112cd4be886b4d979c5497fba190714085f46b8ae67a5e4416c32b4"},
+ {file = "scipy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:5f331eeed0297232d2e6eea51b54e8278ed8bb10b099f69c44e2558c090d06bf"},
+ {file = "scipy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8a51d33556bf70367452d4d601d1742c0e806cd0194785914daf19775f0e67"},
+ {file = "scipy-1.6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:83bf7c16245c15bc58ee76c5418e46ea1811edcc2e2b03041b804e46084ab627"},
+ {file = "scipy-1.6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:794e768cc5f779736593046c9714e0f3a5940bc6dcc1dba885ad64cbfb28e9f0"},
+ {file = "scipy-1.6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5da5471aed911fe7e52b86bf9ea32fb55ae93e2f0fac66c32e58897cfb02fa07"},
+ {file = "scipy-1.6.1-cp39-cp39-win32.whl", hash = "sha256:8e403a337749ed40af60e537cc4d4c03febddcc56cd26e774c9b1b600a70d3e4"},
+ {file = "scipy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a5193a098ae9f29af283dcf0041f762601faf2e595c0db1da929875b7570353f"},
+ {file = "scipy-1.6.1.tar.gz", hash = "sha256:c4fceb864890b6168e79b0e714c585dbe2fd4222768ee90bc1aa0f8218691b11"},
+]
+six = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+tqdm = [
+ {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"},
+ {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"},
+]
+typing-extensions = [
+ {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
+ {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
+ {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+]
+urllib3 = [
+ {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"},
+ {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"},
+]
+watchdog = [
+ {file = "watchdog-2.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af1d42ac65bf3f851d787e723a950d9c878c4ef0ff3381a2196d36b0c4b6d39c"},
+ {file = "watchdog-2.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8a75022cacbd0ad66ab8a9059322a76a43164ea020b373cbc28ddbacf9410b14"},
+ {file = "watchdog-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37bf90ef22b666fb0b5c1ea4375c9cbf43f1ff72489a91bf6f0370ba13e09b2a"},
+ {file = "watchdog-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:66193c811498ff539d0312091bdcbd98cce03b5425b8fa918c80f21a278e8358"},
+ {file = "watchdog-2.1.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5472ee2d23eaedf16c4b5088897cd9f50cd502074f508011180466d678cdf62a"},
+ {file = "watchdog-2.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a079aceede99b83a4cf4089f6e2243c864f368b60f4cce7bf46286f3cfcc8947"},
+ {file = "watchdog-2.1.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:da1ca0845bbc92606b08a08988d8dbcba514a16c209be29d211b13cf0d5be2fd"},
+ {file = "watchdog-2.1.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:5a62491c035646130c290a4cb773d7de103ac0202ac8305404bdb7db17ab5c3f"},
+ {file = "watchdog-2.1.0-py3-none-manylinux2014_i686.whl", hash = "sha256:8c8ff287308a2ba5148aa450d742198d838636b65de52edd3eccfa4c86bf8004"},
+ {file = "watchdog-2.1.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:05544fdd1cdc00b5231fb564f17428c5d502756419008cb8045be5b297eac21c"},
+ {file = "watchdog-2.1.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:8ab111b71fba4f8f77baa39d42bf923d085f64869396497518c43297fe1ec4e7"},
+ {file = "watchdog-2.1.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:06ee7b77a8169f9828f8d24fc3d3d99b2216e1d2f7085b5913022a55161da758"},
+ {file = "watchdog-2.1.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c2d37a9df96d8f9ea560c0824f179168d8501f3e614b5e9f2168b38fe6ef3c12"},
+ {file = "watchdog-2.1.0-py3-none-win32.whl", hash = "sha256:6c6fa079abddea664f7ecda0a02636ca276f095bd26f474c23b3f968f1e938ec"},
+ {file = "watchdog-2.1.0-py3-none-win_amd64.whl", hash = "sha256:80afa2b32aac3abc7fb6ced508fc612997a0c8fb0f497217d54c524ff52e9e3a"},
+ {file = "watchdog-2.1.0-py3-none-win_ia64.whl", hash = "sha256:b8fb08629f52d3e0a060b93d711824f2b06fb8e0d09ad453f2a93d0c97d6b1ec"},
+ {file = "watchdog-2.1.0.tar.gz", hash = "sha256:55316efab52f659b8b7b59730680bfb27ac003522f24c44f6bcd60c4e3736ccd"},
+]
+zipp = [
+ {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"},
+ {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"},
+]
diff --git a/vorlesungen/punktgruppen/pyproject.toml b/vorlesungen/punktgruppen/pyproject.toml
new file mode 100644
index 0000000..527eb57
--- /dev/null
+++ b/vorlesungen/punktgruppen/pyproject.toml
@@ -0,0 +1,15 @@
+[tool.poetry]
+name = "presentation"
+version = "0.1.0"
+description = ""
+authors = ["Nao Pross <np@0hm.ch>"]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+manim = "^0.6.0"
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
diff --git a/vorlesungen/punktgruppen/script.pdf b/vorlesungen/punktgruppen/script.pdf
new file mode 100644
index 0000000..70ea683
--- /dev/null
+++ b/vorlesungen/punktgruppen/script.pdf
Binary files differ
diff --git a/vorlesungen/punktgruppen/script.tex b/vorlesungen/punktgruppen/script.tex
new file mode 100644
index 0000000..0ea0aed
--- /dev/null
+++ b/vorlesungen/punktgruppen/script.tex
@@ -0,0 +1,102 @@
+\documentclass[a4paper]{article}
+
+\usepackage[cm]{manuscript}
+\usepackage{xcolor}
+
+\newcommand{\scene}[1]{\par\noindent[ #1 ]\par}
+\newenvironment{totranslate}{\color{blue!70!black}}{}
+
+\begin{document}
+\section{das Sind wir}
+ (TT) Willkommen zu unserer Präsentation über Punktgruppen und deren Anwendung in der Kristallographie.
+ Ich bin Tim Tönz habe vor dem Studium die Lehre als Elektroinstallateur abgeschlossen und studiere jetzt Elektrotechnik im Vierten Semester mit Herrn Naoki Pross.
+ (NP)Das bin ich \ldots Nun zum Inhalt
+
+\section{Ablauf}
+ Wir möchten Euch zeigen, was eine Punktgruppe ausmacht, Konkret an Bespielen in 2D zeigen mit Gemainsamkeiten zu Algebraischen Symmetrien.
+ Da wir Menschen jedoch 3 Räumliche Dimensionen Wahrnehmen möchten wir euch die 3D Symetrien natürlcih nicht vorenthalten.
+ Um dem Thema des Mathematikseminars gerecht zu werden, Werden wir die einfache Verbindung zwischen Matrizen und Punktsymetrien zeigen.
+ Dammit die Praxis nicht ganz vergessen geht, Kristalle Mathematisch beschreiben und dessen Limitationen in hinsicht Symmetrien.
+ Als Abschluss Zeigen wir euch einen zusammenhan zwischen Piezoelektrizität und Symmetrien.
+
+\section{intro}
+ Ich hoffe wir konnten schon mit der Einleitung ein wenig Neugirde wecken.
+ fals dies noch nicht der Fall ist, sind hier noch die wichtigsten fragen, welche wir euch beantworten wollen, oder zumindest überzeugen, wieso dies spannende Fragen sind.
+ Als erstes, was eine Symetrie ist oder in unserem Fall eine Punktsymetrie.
+ Was macht ein Kristall aus, also wie kann man seine Wichtigsten eigenschaften mathematisch beschreiben.
+ Als letztes noch zu der Piezoelektrizität, welche ein Effekt beschreibt, dass bestimmte Krisstalle eine elektrische Spannung erzeugen, wenn sie unter mechanischen Druck gesetzt werden.
+ welche kristalle diese fähigkeit haben, hat ganz konkret mit ihrer Symmetrie zu tun.
+\section{Geometrie}
+\begin{totranslate}
+We'll start with geometric symmetries as they are the simplest to grasp.
+
+\scene{Intro}
+ To mathematically formulate the concept, we will think of symmetries as
+ actions to perform on an object, like this square. The simplest action, is to
+ take this square, do nothing and put it back down. Another action could be to
+ flip it along an axis, or to rotate it around its center by 90 degrees.
+
+\scene{Cyclic Groups}
+ Let's focus our attention on the simplest class of symmetries: those
+ generated by a single rotation. We will gather the symmetries in a group
+ \(G\), and denote that it is generated by a rotation \(r\) with these angle
+ brackets.
+
+ Take this pentagon as an example. By applying the rotation \emph{action} 5
+ times, it is the same as if we had not done anything, furthermore, if we
+ \emph{act} a sixth time with \(r\), it will be the same as if we had just
+ acted with \(r\) once. Thus the group only contain the identity and the
+ powers of \(r\) up to 4.
+
+ In general, groups with this structure are known as the ``Cyclic Groups'' of
+ order \(n\), where the action \(r\) can be applied \(n-1\) times before
+ wrapping around.
+
+ % You can think of them as the rotational symmetries of an \(n\)-gon.
+
+\scene{Dihedral Groups}
+ Okay that was not difficult, now let's spice this up a bit. Consider this
+ group for a square, generated by two actions: a rotation \(r\) and a
+ reflection \(\sigma\). Because we have two actions we have to write in the
+ generator how they relate to each other.
+
+ Let's analyze this expression. Two reflections are the same as the identity.
+ Four rotations are the same as the identity, and a rotation followed by a
+ reflection, twice, is the same as the identity.
+
+ This forms a group with 8 possible unique actions. This too can be generalized
+ to an \(n\)-gon, and is known as the ``Dihedral Group'' of order \(n\).
+\end{totranslate}
+
+\scene{Symmetrische Gruppe}
+\scene{Alternierende Gruppe}
+
+\section{Algebra}
+\begin{totranslate}
+Let's now move into something seemingly unrelated: \emph{algebra}.
+\scene{Complex numbers and cyclic groups}
+\end{totranslate}
+
+\scene{Matrizen}
+ Das man mit matrizen so einiges darstellen kann ist keine neuigkeit mehr nach einem halben Semester Matheseminar.
+ Also überrascht es wohl auch keinen, das mann alle punktsymetrischen Operationen auch mit Matrizen Formulieren kann.
+ (Beispiel zu Rotation mit video)
+ Für die Spiegelung wie auch eine Punkt inversion habt ihr dank dem matheseminar bestmmt schon eine Idee wie diese Operationen als Matrizen aussehen.
+ Ich weis nicht obe der Tipp etwas nützt, aber ih müsst nur in der Gruppe O(3) suchen.
+ Was auch sinn macht, denn die Gruppe O(3) zeichnet sich aus weil ihre Matrizen distanzen konstant hallten wie auch einen fixpunkt haben was sehr erwünscht ist, wenn man Punktsymmetrien beschreiben will.
+
+
+
+\scene{Krystalle}
+ Jenen welchen die Kristalle bis jetzt ein wenig zu kurz gekommen sind, Freuen sich hoffentlich zurecht an dieser Folie.
+ Es geht ab jetzt nähmlich um Kristalle.
+ Bevor wir mit ihnen arbeiten könne sollten wir jedoch klähren, was ein Kristall ist.
+ Per definition aus eienm Anerkanten Theoriebuch von XXXXXXXXXX Zitat:"YYYYYYYYYYYYYYY"
+ Was so viel heist wie, ein Idealer Kristall ist der schlimmste Ort um sich zu verlaufen.
+ Macht man nähmlich einen Schritt in genau in das nächste lattice feld hat siet der kristall wieser genau gleich aus.
+ Als Orentierungshilfe ist diese eigenschaft ein grosser Nachteil nicht jedoch wenn man versucht alle möglichen Symmetrien in einem Kristall zu finden.
+ Denn die Lattice Strucktur schränkt die unendlichen möglichen Punktsymmetrien im 3D Raum beträchtlich ein.
+ Was im Englischen bekannt is unter dem Crystallographic Restrictiontheorem.
+
+\end{document}
+% vim:et ts=2 sw=2:
diff --git a/vorlesungen/punktgruppen/shotcut/Punktgruppen/Punktgruppen.mlt b/vorlesungen/punktgruppen/shotcut/Punktgruppen/Punktgruppen.mlt
new file mode 100644
index 0000000..7275d5c
--- /dev/null
+++ b/vorlesungen/punktgruppen/shotcut/Punktgruppen/Punktgruppen.mlt
@@ -0,0 +1,101 @@
+<?xml version="1.0" standalone="no"?>
+<mlt LC_NUMERIC="C" version="7.0.0" title="Shotcut version 21.05.01" producer="main_bin">
+ <profile description="HD 1080p 25 fps" width="1920" height="1080" progressive="1" sample_aspect_num="1" sample_aspect_den="1" display_aspect_num="16" display_aspect_den="9" frame_rate_num="60" frame_rate_den="1" colorspace="709"/>
+ <chain id="chain0" out="00:01:09.983">
+ <property name="length">4200</property>
+ <property name="eof">pause</property>
+ <property name="resource">/home/npross/docs/school/hsr/MathSem1/SeminarMatrizen/vorlesungen/punktgruppen/media/videos/camera/DSCF6392.MOV</property>
+ <property name="mlt_service">avformat-novalidate</property>
+ <property name="seekable">1</property>
+ <property name="audio_index">1</property>
+ <property name="video_index">0</property>
+ <property name="mute_on_pause">0</property>
+ <property name="xml">was here</property>
+ <property name="shotcut:hash">d255c7f03c50cb9dcfb2f9e0db73cb05</property>
+ </chain>
+ <playlist id="main_bin">
+ <property name="xml_retain">1</property>
+ <entry producer="chain0" in="00:00:00.000" out="00:01:09.983"/>
+ </playlist>
+ <producer id="black" in="00:00:00.000" out="00:01:09.983">
+ <property name="length">00:01:10.000</property>
+ <property name="eof">pause</property>
+ <property name="resource">0</property>
+ <property name="aspect_ratio">1</property>
+ <property name="mlt_service">color</property>
+ <property name="mlt_image_format">rgba</property>
+ <property name="set.test_audio">0</property>
+ </producer>
+ <playlist id="background">
+ <entry producer="black" in="00:00:00.000" out="00:01:09.983"/>
+ </playlist>
+ <chain id="chain1" out="00:01:09.983">
+ <property name="length">4200</property>
+ <property name="eof">pause</property>
+ <property name="resource">/home/npross/docs/school/hsr/MathSem1/SeminarMatrizen/vorlesungen/punktgruppen/media/videos/camera/DSCF6392.MOV</property>
+ <property name="mlt_service">avformat-novalidate</property>
+ <property name="seekable">1</property>
+ <property name="audio_index">-1</property>
+ <property name="video_index">0</property>
+ <property name="mute_on_pause">0</property>
+ <property name="xml">was here</property>
+ <property name="shotcut:hash">d255c7f03c50cb9dcfb2f9e0db73cb05</property>
+ <property name="shotcut:caption">DSCF6392.MOV</property>
+ <property name="shotcut:defaultAudioIndex">1</property>
+ </chain>
+ <playlist id="playlist0">
+ <property name="shotcut:video">1</property>
+ <property name="shotcut:name">V1</property>
+ <entry producer="chain1" in="00:00:00.000" out="00:01:09.983"/>
+ </playlist>
+ <chain id="chain2" out="00:01:09.983">
+ <property name="length">4200</property>
+ <property name="eof">pause</property>
+ <property name="resource">/home/npross/docs/school/hsr/MathSem1/SeminarMatrizen/vorlesungen/punktgruppen/media/videos/camera/DSCF6392.MOV</property>
+ <property name="mlt_service">avformat-novalidate</property>
+ <property name="seekable">1</property>
+ <property name="audio_index">1</property>
+ <property name="video_index">0</property>
+ <property name="mute_on_pause">0</property>
+ <property name="xml">was here</property>
+ <property name="shotcut:hash">d255c7f03c50cb9dcfb2f9e0db73cb05</property>
+ <property name="shotcut:caption">DSCF6392.MOV</property>
+ <property name="shotcut:defaultAudioIndex">1</property>
+ </chain>
+ <playlist id="playlist1">
+ <property name="shotcut:audio">1</property>
+ <property name="shotcut:name">A1</property>
+ <entry producer="chain2" in="00:00:00.000" out="00:01:09.983"/>
+ </playlist>
+ <tractor id="tractor0" title="Shotcut version 21.05.01" in="00:00:00.000" out="00:01:09.983">
+ <property name="shotcut">1</property>
+ <property name="shotcut:scaleFactor">0.174581</property>
+ <property name="shotcut:projectAudioChannels">2</property>
+ <property name="shotcut:projectFolder">1</property>
+ <track producer="background"/>
+ <track producer="playlist0"/>
+ <track producer="playlist1" hide="video"/>
+ <transition id="transition0">
+ <property name="a_track">0</property>
+ <property name="b_track">1</property>
+ <property name="mlt_service">mix</property>
+ <property name="always_active">1</property>
+ <property name="sum">1</property>
+ </transition>
+ <transition id="transition1">
+ <property name="a_track">0</property>
+ <property name="b_track">1</property>
+ <property name="version">0.9</property>
+ <property name="mlt_service">frei0r.cairoblend</property>
+ <property name="threads">0</property>
+ <property name="disable">1</property>
+ </transition>
+ <transition id="transition2">
+ <property name="a_track">0</property>
+ <property name="b_track">2</property>
+ <property name="mlt_service">mix</property>
+ <property name="always_active">1</property>
+ <property name="sum">1</property>
+ </transition>
+ </tractor>
+</mlt>
diff --git a/vorlesungen/punktgruppen/slides.pdf b/vorlesungen/punktgruppen/slides.pdf
new file mode 100644
index 0000000..78cd5dd
--- /dev/null
+++ b/vorlesungen/punktgruppen/slides.pdf
Binary files differ
diff --git a/vorlesungen/punktgruppen/slides.tex b/vorlesungen/punktgruppen/slides.tex
new file mode 100644
index 0000000..08b6ecb
--- /dev/null
+++ b/vorlesungen/punktgruppen/slides.tex
@@ -0,0 +1,838 @@
+\documentclass[12pt, xcolor, aspectratio=169, handout]{beamer}
+
+% language
+\usepackage{polyglossia}
+\setmainlanguage{german}
+
+% pretty drawings
+\usepackage{tikz}
+\usetikzlibrary{positioning}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{shapes.misc}
+\usetikzlibrary{calc}
+
+\usetikzlibrary{external}
+\tikzexternalize[
+ mode = graphics if exists,
+ figure list = true,
+ prefix=build/
+]
+
+% Theme
+\beamertemplatenavigationsymbolsempty
+
+% set look
+\usetheme{default}
+\usecolortheme{fly}
+\usefonttheme{serif}
+
+%% Set font
+\usepackage[p,osf]{scholax}
+\usepackage{amsmath}
+\usepackage[scaled=1.075,ncf,vvarbb]{newtxmath}
+
+% set colors
+\definecolor{background}{HTML}{202020}
+
+\setbeamercolor{normal text}{fg=white, bg=background}
+\setbeamercolor{structure}{fg=white}
+
+\setbeamercolor{item projected}{use=item,fg=background,bg=item.fg!35}
+
+\setbeamercolor*{palette primary}{use=structure,fg=white,bg=structure.fg}
+\setbeamercolor*{palette secondary}{use=structure,fg=white,bg=structure.fg!75}
+\setbeamercolor*{palette tertiary}{use=structure,fg=white,bg=structure.fg!50}
+\setbeamercolor*{palette quaternary}{fg=white,bg=background}
+
+\setbeamercolor*{block title}{parent=structure}
+\setbeamercolor*{block body}{fg=background, bg=}
+
+\setbeamercolor*{framesubtitle}{fg=white}
+
+\setbeamertemplate{section page}
+{
+ \begin{center}
+ \Huge
+ \insertsection
+ \end{center}
+}
+\AtBeginSection{\frame{\sectionpage}}
+
+% Macros
+\newcommand{\ten}[1]{#1}
+
+% Metadata
+\title{\LARGE \scshape Punktgruppen und Kristalle}
+\author[N. Pross, T. T\"onz]{Naoki Pross, Tim T\"onz}
+\institute{Hochschule f\"ur Technik OST, Rapperswil}
+\date{10. Mai 2021}
+
+% Slides
+\begin{document}
+\frame{
+ \titlepage
+ \vfill
+ \begin{center}
+ \small \color{gray}
+ Slides: \texttt{s.0hm.ch/ctBsD}
+ \end{center}
+}
+\frame{\tableofcontents}
+
+\frame{
+ \begin{itemize}
+ \item Was heisst \emph{Symmetrie} in der Mathematik? \pause
+ \item Wie kann ein Kristall modelliert werden? \pause
+ \item Aus der Physik: Piezoelektrizit\"at \pause
+ \end{itemize}
+ \begin{center}
+ \begin{tikzpicture}
+ \begin{scope}[
+ node distance = 0cm
+ ]
+ \node[
+ rectangle, fill = gray!40!background,
+ minimum width = 3cm, minimum height = 2cm,
+ ] (body) {\(\vec{E}_p = \vec{0}\)};
+
+ \node[
+ draw, rectangle, thick, white, fill = red!50,
+ minimum width = 3cm, minimum height = 1mm,
+ above = of body
+ ] (pos) {};
+
+ \node[
+ draw, rectangle, thick, white, fill = blue!50,
+ minimum width = 3cm, minimum height = 1mm,
+ below = of body
+ ] (neg) {};
+
+ \draw[white, very thick, -Circle] (pos.east) to ++ (1,0) node (p) {};
+ \draw[white, very thick, -Circle] (neg.east) to ++ (1,0) node (n) {};
+
+ \draw[white, thick, ->] (p) to[out = -70, in = 70] node[midway, right] {\(U = 0\)} (n);
+ \end{scope}
+ \begin{scope}[
+ node distance = 0cm,
+ xshift = 7cm
+ ]
+ \node[
+ rectangle, fill = gray!40!background,
+ minimum width = 3cm, minimum height = 1.5cm,
+ ] (body) {\(\vec{E}_p = \vec{0}\)};
+
+ \node[
+ draw, rectangle, thick, white, fill = red!50,
+ minimum width = 3cm, minimum height = 1mm,
+ above = of body
+ ] (pos) {};
+
+ \node[
+ draw, rectangle, thick, white, fill = blue!50,
+ minimum width = 3cm, minimum height = 1mm,
+ below = of body
+ ] (neg) {};
+
+ \draw[orange, very thick, <-] (pos.north) to node[near end, right] {\(\vec{F}\)} ++(0,1);
+ \draw[orange, very thick, <-] (neg.south) to node[near end, right] {\(\vec{F}\)} ++(0,-1);
+
+ \draw[white, very thick, -Circle] (pos.east) to ++ (1,0) node (p) {};
+ \draw[white, very thick, -Circle] (neg.east) to ++ (1,0) node (n) {};
+
+ \draw[white, thick, ->] (p) to[out = -70, in = 70] node[midway, right] {\(U > 0\)} (n);
+ \end{scope}
+ \end{tikzpicture}
+ \end{center}
+}
+
+\section{2D Symmetrien}
+%% Made in video
+{
+ \usebackgroundtemplate{
+ \includegraphics[height=\paperheight]{media/images/nosignal}}
+ \frame{}
+}
+
+\section{Algebraische Symmetrien}
+%% Made in video
+\frame{
+ \begin{columns}[T]
+ \begin{column}{.5\textwidth}
+ Produkt mit \(i\)
+ \begin{align*}
+ 1 \cdot i &= i \\
+ i \cdot i &= -1 \\
+ -1 \cdot i &= -i \\
+ -i \cdot i &= 1
+ \end{align*}
+ \pause
+ %
+ Gruppe
+ \begin{align*}
+ G &= \left\{
+ 1, i, -1, -i
+ \right\} \\
+ &= \left\{
+ 1, i, i^2, i^3
+ \right\} \\
+ C_4 &= \left\{
+ \mathbb{1}, r, r^2, r^3
+ \right\}
+ \end{align*}
+ \pause
+ \end{column}
+ \begin{column}{.5\textwidth}
+ Darstellung \(\phi : C_4 \to G\)
+ \begin{align*}
+ \phi(\mathbb{1}) &= 1 & \phi(r^2) &= i^2 \\
+ \phi(r) &= i & \phi(r^3) &= i^3
+ \end{align*}
+ \pause
+ %
+ Homomorphismus
+ \begin{align*}
+ \phi(r \circ \mathbb{1}) &= \phi(r) \cdot \phi(\mathbb{1}) \\
+ &= i \cdot 1
+ \end{align*}
+ \pause
+ %
+ \(\phi\) ist bijektiv \(\implies C_4 \cong G\)
+ \pause
+ %
+ \begin{align*}
+ \psi : C_4 &\to (\mathbb{Z}/4\mathbb{Z}, +) \\
+ \psi(\mathbb{1}\circ r^2) &= 0 + 2 \pmod{4}
+ \end{align*}
+ \end{column}
+ \end{columns}
+}
+
+\section{3D Symmetrien}
+%% Made in video
+{
+ \usebackgroundtemplate{
+ \includegraphics[height=\paperheight]{media/images/nosignal}}
+ \frame{}
+}
+
+\section{Matrizen}
+\frame{
+ \begin{columns}[T]
+ \begin{column}{.5\textwidth}
+ Symmetriegruppe
+ \[
+ G = \left\{\mathbb{1}, r, \sigma, \dots \right\}
+ \]
+ \pause
+ Matrixdarstellung
+ \begin{align*}
+ \Phi : G &\to O(3) \\
+ g &\mapsto \Phi_g
+ \end{align*}
+ \pause
+ Orthogonale Gruppe
+ \[
+ O(n) = \left\{ Q : QQ^t = Q^tQ = I \right\}
+ \]
+ \end{column}
+ \pause
+ \begin{column}{.5\textwidth}
+ \begin{align*}
+ \Phi_\mathbb{1} &= \begin{pmatrix}
+ 1 & 0 & 0 \\
+ 0 & 1 & 0 \\
+ 0 & 0 & 1
+ \end{pmatrix} = I \\[1em]
+ \Phi_\sigma &= \begin{pmatrix}
+ 1 & 0 & 0 \\
+ 0 & -1 & 0 \\
+ 0 & 0 & 1
+ \end{pmatrix} \\[1em]
+ \Phi_r &= \begin{pmatrix}
+ \cos \alpha & -\sin \alpha & 0 \\
+ \sin \alpha & \cos \alpha & 0 \\
+ 0 & 0 & 1
+ \end{pmatrix}
+ \end{align*}
+ \end{column}
+ \end{columns}
+}
+
+\section{Kristalle}
+\begin{frame}[fragile]{M\"ogliche Kristallstrukturen}
+ \begin{center}
+ \begin{tikzpicture}[]
+ \node[circle, dashed, draw = gray,
+ thick, fill = background,
+ minimum size = 4cm] {};
+ \node[gray] at (.9,-1.2) {674};
+
+ \node[circle, draw = white, thick,
+ fill = orange!40!background,
+ xshift = -3mm, yshift = 2mm,
+ minimum size = 2.75cm] (A) {};
+ \node[white, yshift = 2mm] at (A) {230};
+
+ \node[circle, draw = white, thick,
+ fill = red!20!background,
+ xshift = -5mm, yshift = -5mm,
+ minimum size = 1cm] {32};
+ \end{tikzpicture}
+ \end{center}
+\end{frame}
+
+\begin{frame}[fragile]{}
+ \begin{columns}
+ \begin{column}{.5\textwidth}
+ \begin{center}
+ \begin{tikzpicture}[
+ dot/.style = {
+ draw, circle, thick, white, fill = gray!40!background,
+ minimum size = 2mm,
+ inner sep = 0pt,
+ outer sep = 1mm,
+ },
+ ]
+
+ \begin{scope}
+ \clip (-2,-2) rectangle (3,4);
+ \foreach \y in {-7,-6,...,7} {
+ \foreach \x in {-7,-6,...,7} {
+ \node[dot, xshift=3mm*\y] (N\x\y) at (\x, \y) {};
+ }
+ }
+ \end{scope}
+ \draw[white, thick] (-2, -2) rectangle (3,4);
+
+ \draw[red!80!background, thick, ->]
+ (N00) to node[midway, below] {\(\vec{a}_1\)} (N10);
+ \draw[cyan!80!background, thick, ->]
+ (N00) to node[midway, left] {\(\vec{a}_2\)} (N01);
+ \end{tikzpicture}
+ \end{center}
+ \end{column}
+ \pause
+ \begin{column}{.5\textwidth}
+ Kristallgitter:
+ \(n_i \in \mathbb{Z}\),
+ \(\vec{a}_i \in \mathbb{R}^3\)
+ \[
+ \vec{r} = n_1 \vec{a}_1 + n_2 \vec{a}_2 + n_3 \vec{a}_3
+ \]
+ \vspace{1cm}
+ \pause
+
+ Invariant unter Translation
+ \[
+ Q_i(\vec{r}) = \vec{r} + \vec{a}_i
+ \]
+ \end{column}
+ \end{columns}
+\end{frame}
+
+\begin{frame}[fragile]{}
+ \begin{columns}[T]
+ \begin{column}{.5\textwidth}
+ \onslide<1->{
+ Wie kombiniert sich \(Q_i\) mit der anderen Symmetrien?
+ }
+ \begin{center}
+ \begin{tikzpicture}[
+ dot/.style = {
+ draw, circle, thick, white, fill = gray!40!background,
+ minimum size = 2mm,
+ inner sep = 0pt,
+ outer sep = 1mm,
+ },
+ ]
+
+ \onslide<2->{
+ \node[dot] (A1) at (0,0) {};
+ \node[below left] at (A1) {\(A\)};
+ }
+
+ \onslide<3->{
+ \node[dot] (A2) at (2.5,0) {};
+ \node[below right] at (A2) {\(A'\)};
+
+ \draw[red!80!background, thick, ->]
+ (A1) to node[midway, below] {\(\vec{Q}\)} (A2);
+ }
+
+ \onslide<4->{
+ \node[dot] (B1) at (120:2.5) {};
+ \node[above left] at (B1) {\(B\)};
+
+ \draw[green!70!background, thick, ->]
+ (A1) ++(.5,0) arc (0:120:.5)
+ node[midway, above, xshift=1mm] {\(C_n\)};
+ \draw[red!80!background, dashed, thick, ->] (A1) to (B1);
+ }
+
+ \onslide<5->{
+ \node[dot] (B2) at ($(A2)+(60:2.5)$) {};
+ \node[above right] at (B2) {\(B'\)};
+
+ \draw[green!70!background, thick, dashed, ->]
+ (A2) ++(-.5,0) arc (180:60:.5);
+ \draw[red!80!background, dashed, thick, ->] (A2) to (B2);
+ }
+
+ \onslide<6->{
+ \draw[yellow!80!background, thick, ->]
+ (B1) to node[above, midway] {\(\vec{Q}'\)} (B2);
+ }
+
+ \onslide<7->{
+ \draw[gray, dashed, thick] (A1) to (A1 |- B1) node (X) {};
+ \draw[gray, dashed, thick] (A2) to (A2 |- B2);
+ }
+
+ \onslide<8->{
+ \node[above left, xshift=-2mm] at (X) {\(x\)};
+ }
+ \end{tikzpicture}
+ \end{center}
+ \end{column}
+ \begin{column}{.5\textwidth}
+ \onslide<9->{
+ Sei \(q = |\vec{Q}|\), \(\alpha = 2\pi/n\) und \(n \in \mathbb{N}\)
+ }
+ \begin{align*}
+ \onslide<10->{q' = n q &= q + 2x \\}
+ \onslide<11->{nq &= q + 2q\sin(\alpha - \pi/2) \\}
+ \onslide<12->{n &= 1 - 2\cos\alpha}
+ \end{align*}
+ \onslide<13->{
+ Somit muss
+ \begin{align*}
+ \alpha &= \cos^{-1}\left(\frac{1-n}{2}\right) \\[1em]
+ \alpha &\in \left\{ 0, 60^\circ, 90^\circ, 120^\circ, 180^\circ \right\} \\
+ n &\in \left\{ 1, 2, 3, 4, 6 \right\}
+ \end{align*}
+ }
+ \end{column}
+ \end{columns}
+\end{frame}
+
+{
+ \usebackgroundtemplate[fragile]{
+ \begin{tikzpicture}[
+ overlay,
+ xshift = .45\paperwidth,
+ yshift = .47\paperheight,
+ classcirc/.style = {
+ draw = gray, thick, circle,
+ minimum size = 12mm,
+ inner sep = 0pt, outer sep = 0pt,
+ },
+ classlabel/.style = {
+ below right = 5mm
+ },
+ round/.style = {
+ draw = yellow, thick, circle,
+ minimum size = 1mm,
+ inner sep = 0pt, outer sep = 0pt,
+ },
+ cross/.style = {
+ cross out, draw = magenta, thick,
+ minimum size = 1mm,
+ inner sep = 0pt, outer sep = 0pt
+ },
+ ]
+ \matrix [row sep = 3mm, column sep = 0mm] {
+ \node[classcirc] (C1) {} node[classlabel] {\(C_{1}\)}; &
+ \node[classcirc] (C2) {} node[classlabel] {\(C_{2}\)}; &
+ \node[classcirc] (C3) {} node[classlabel] {\(C_{3}\)}; &
+ \node[classcirc] (Ci) {} node[classlabel] {\(C_{i}\)}; &
+
+ \node[classcirc] (Cs) {} node[classlabel] {\(C_{s}\)}; &
+ \node[classcirc] (C3i) {} node[classlabel] {\(C_{3i}\)}; &
+ \node[classcirc] (C2h) {} node[classlabel] {\(C_{2h}\)}; &
+ \node[classcirc] (D2) {} node[classlabel] {\(D_{2}\)}; \\
+
+ \node[classcirc] (D3d) {} node[classlabel] {\(D_{3d}\)}; &
+ \node[classcirc] (C2v) {} node[classlabel] {\(C_{2v}\)}; &
+ \node[classcirc] (D2h) {} node[classlabel] {\(D_{2h}\)}; &
+ \node[classcirc] (D3) {} node[classlabel] {\(D_{3}\)}; &
+
+ \node[classcirc] (C4) {} node[classlabel] {\(C_{4}\)}; &
+ \node[classcirc] (C6) {} node[classlabel] {\(C_{6}\)}; &
+ \node[classcirc] (D3dP) {} node[classlabel] {\(D_{3d}\)}; &
+ \node[classcirc] (S4) {} node[classlabel] {\(S_{4}\)}; \\
+
+ \node[classcirc] (S3) {} node[classlabel] {\(S_{3}\)}; &
+ \node[classcirc, dashed] (T) {} node[classlabel] {\(T_{}\)}; &
+ \node[classcirc] (C4h) {} node[classlabel] {\(C_{4h}\)}; &
+ \node[classcirc] (C6h) {} node[classlabel] {\(C_{6h}\)}; &
+
+ \node[classcirc, dashed] (Th) {} node[classlabel] {\(T_{h}\)}; &
+ \node[classcirc] (C4v) {} node[classlabel] {\(C_{4v}\)}; &
+ \node[classcirc] (C6v) {} node[classlabel] {\(C_{6v}\)}; &
+ \node[classcirc, dashed] (Td) {} node[classlabel] {\(T_{d}\)}; \\
+
+ \node[classcirc] (D2d) {} node[classlabel] {\(D_{2d}\)}; &
+ \node[classcirc] (D3h) {} node[classlabel] {\(D_{3h}\)}; &
+ \node[classcirc, dashed] (O) {} node[classlabel] {\(O_{}\)}; &
+ \node[classcirc] (D4) {} node[classlabel] {\(D_{4}\)}; &
+
+ \node[classcirc] (D6) {} node[classlabel] {\(D_{6}\)}; &
+ \node[classcirc, dashed] (Oh) {} node[classlabel] {\(O_{h}\)}; &
+ \node[classcirc] (D4h) {} node[classlabel] {\(D_{4h}\)}; &
+ \node[classcirc] (D6h) {} node[classlabel] {\(D_{6h}\)}; \\
+ };
+
+
+ \node[cross] at ($(C1)+(4mm,0)$) {};
+
+
+ \node[cross] at ($(C2)+(4mm,0)$) {};
+ \node[cross] at ($(C2)-(4mm,0)$) {};
+
+
+ \node[cross] at ($(C3)+( 0:4mm)$) {};
+ \node[cross] at ($(C3)+(120:4mm)$) {};
+ \node[cross] at ($(C3)+(240:4mm)$) {};
+
+
+ \node[cross] at ($(Ci)+(4mm,0)$) {};
+ \node[round] at ($(Ci)-(4mm,0)$) {};
+
+
+ \node[cross] at ($(Cs)+(4mm,0)$) {};
+ \node[round] at ($(Cs)+(4mm,0)$) {};
+
+
+ \node[cross] at ($(C3i)+( 0:4mm)$) {};
+ \node[cross] at ($(C3i)+(120:4mm)$) {};
+ \node[cross] at ($(C3i)+(240:4mm)$) {};
+ \node[round] at ($(C3i)+( 60:4mm)$) {};
+ \node[round] at ($(C3i)+(180:4mm)$) {};
+ \node[round] at ($(C3i)+(300:4mm)$) {};
+
+
+ \node[cross] at ($(C2h)+(4mm,0)$) {};
+ \node[cross] at ($(C2h)-(4mm,0)$) {};
+ \node[round] at ($(C2h)+(4mm,0)$) {};
+ \node[round] at ($(C2h)-(4mm,0)$) {};
+
+
+ \node[cross] at ($(D2)+( 20:4mm)$) {};
+ \node[cross] at ($(D2)+(200:4mm)$) {};
+ \node[round] at ($(D2)+(160:4mm)$) {};
+ \node[round] at ($(D2)+(340:4mm)$) {};
+
+
+ \foreach \x in {0, 120, 240} {
+ \node[cross] at ($(D3d)+({\x+15}:4mm)$) {};
+ \node[cross] at ($(D3d)+({\x-15}:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 180} {
+ \node[cross] at ($(C2v)+({\x+15}:4mm)$) {};
+ \node[cross] at ($(C2v)+({\x-15}:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 180} {
+ \node[cross] at ($(D2h)+({\x+15}:4mm)$) {};
+ \node[cross] at ($(D2h)+({\x-15}:4mm)$) {};
+ \node[round] at ($(D2h)+({\x+15}:4mm)$) {};
+ \node[round] at ($(D2h)+({\x-15}:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 120, 240} {
+ \node[cross] at ($(D3)+({\x+15}:4mm)$) {};
+ \node[round] at ($(D3)+({\x-15}:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 90, 180, 270} {
+ \node[cross] at ($(C4)+(\x:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 60, 120, 180, 240, 300} {
+ \node[cross] at ($(C6)+(\x:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 120, 240} {
+ \node[cross] at ($(D3dP)+({\x+15}:4mm)$) {};
+ \node[cross] at ($(D3dP)+({\x-15}:4mm)$) {};
+ \node[round] at ($(D3dP)+({\x+15+60}:4mm)$) {};
+ \node[round] at ($(D3dP)+({\x-15+60}:4mm)$) {};
+ }
+
+
+ \node[cross] at ($(S4)+(4mm,0)$) {};
+ \node[cross] at ($(S4)-(4mm,0)$) {};
+ \node[round] at ($(S4)+(0,4mm)$) {};
+ \node[round] at ($(S4)-(0,4mm)$) {};
+
+
+ \foreach \x in {0, 120, 240} {
+ \node[cross] at ($(S3)+(\x:4mm)$) {};
+ \node[round] at ($(S3)+(\x:4mm)$) {};
+ }
+
+
+ %% TODO: T
+
+
+ \foreach \x in {0, 90, 180, 270} {
+ \node[cross] at ($(C4h)+(\x:4mm)$) {};
+ \node[round] at ($(C4h)+(\x:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 60, 120, 180, 240, 300} {
+ \node[cross] at ($(C6h)+(\x:4mm)$) {};
+ \node[round] at ($(C6h)+(\x:4mm)$) {};
+ }
+
+
+ %% TODO: Th
+
+
+ \foreach \x in {0, 90, 180, 270} {
+ \node[cross] at ($(C4v)+(\x+15:4mm)$) {};
+ \node[cross] at ($(C4v)+(\x-15:4mm)$) {};
+ }
+
+
+
+ \foreach \x in {0, 60, 120, 180, 240, 300} {
+ \node[cross] at ($(C6v)+(\x+10:4mm)$) {};
+ \node[cross] at ($(C6v)+(\x-10:4mm)$) {};
+ }
+
+
+ %% TODO: Td
+
+
+ \foreach \x in {0, 180} {
+ \node[cross] at ($(D2d)+({\x+15}:4mm)$) {};
+ \node[round] at ($(D2d)+({\x-15}:4mm)$) {};
+
+ \node[round] at ($(D2d)+({\x+15+90}:4mm)$) {};
+ \node[cross] at ($(D2d)+({\x-15+90}:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 120, 240} {
+ \node[cross] at ($(D3h)+({\x+15}:4mm)$) {};
+ \node[cross] at ($(D3h)+({\x-15}:4mm)$) {};
+ \node[round] at ($(D3h)+({\x+15}:4mm)$) {};
+ \node[round] at ($(D3h)+({\x-15}:4mm)$) {};
+ }
+
+
+ %% TODO: O
+
+
+ \foreach \x in {0, 90, 180, 270} {
+ \node[cross] at ($(D4)+({\x+15}:4mm)$) {};
+ \node[round] at ($(D4)+({\x-15}:4mm)$) {};
+ }
+
+ \foreach \x in {0, 60, 120, 180, 240, 300} {
+ \node[cross] at ($(D6)+({\x+10}:4mm)$) {};
+ \node[round] at ($(D6)+({\x-10}:4mm)$) {};
+ }
+
+
+ % TODO Oh
+
+
+ \foreach \x in {0, 90, 180, 270} {
+ \node[cross] at ($(D4h)+(\x+15:4mm)$) {};
+ \node[cross] at ($(D4h)+(\x-15:4mm)$) {};
+ \node[round] at ($(D4h)+(\x+15:4mm)$) {};
+ \node[round] at ($(D4h)+(\x-15:4mm)$) {};
+ }
+
+
+ \foreach \x in {0, 60, 120, 180, 240, 300} {
+ \node[cross] at ($(D6h)+({\x+10}:4mm)$) {};
+ \node[cross] at ($(D6h)+({\x-10}:4mm)$) {};
+ \node[round] at ($(D6h)+({\x+10}:4mm)$) {};
+ \node[round] at ($(D6h)+({\x-10}:4mm)$) {};
+ }
+ \end{tikzpicture}
+ }
+ \begin{frame}[fragile]{}
+ \end{frame}
+}
+
+\section{Anwendungen}
+\begin{frame}[fragile]{}
+ \centering
+ \begin{tikzpicture}[
+ box/.style = {
+ rectangle, thick, draw = white, fill = darkgray!50!background,
+ minimum height = 1cm, outer sep = 2mm,
+ },
+ ]
+
+ \matrix [nodes = {box, align = center}, column sep = 1cm, row sep = 1.5cm] {
+ & \node (A) {32 Punktgruppen}; \\
+ \node (B) {11 Mit\\ Inversionszentrum}; & \node (C) {21 Ohne\\ Inversionszentrum}; \\
+ & \node[fill=red!20!background] (D) {20 Piezoelektrisch}; & \node (E) {1 Nicht\\ piezoelektrisch}; \\
+ };
+
+ \draw[thick, ->] (A.west) to[out=180, in=90] (B.north);
+ \draw[thick, ->] (A.south) to (C);
+ \draw[thick, ->] (C.south) to (D.north);
+ \draw[thick, ->] (C.east) to[out=0, in=90] (E.north);
+ \end{tikzpicture}
+\end{frame}
+
+\begin{frame}[fragile]{}
+ \begin{tikzpicture}[
+ overlay, xshift = 1.5cm, yshift = 1.5cm,
+ node distance = 2mm,
+ charge/.style = {
+ circle, draw = white, thick,
+ minimum size = 5mm
+ },
+ positive/.style = { fill = red!50 },
+ negative/.style = { fill = blue!50 },
+ ]
+
+ \node[font = {\large\bfseries}, align = center] (title) at (5.5,0) {Mit und Ohne\\ Symmetriezentrum};
+ \node[below = of title] {Polarisation Feld \(\vec{E}_p\)};
+ \pause
+
+ \begin{scope}
+ \matrix[nodes = { charge }, row sep = 8mm, column sep = 8mm] {
+ \node[positive] {}; & \node[negative] (N) {}; & \node [positive] {}; \\
+ \node[negative] (W) {}; & \node[positive] {}; & \node [negative] (E) {}; \\
+ \node[positive] {}; & \node[negative] (S) {}; & \node [positive] {}; \\
+ };
+ \draw[gray, dashed] (W) to (N) to (E) to (S) to (W);
+ \end{scope}
+ \pause
+
+ \begin{scope}[yshift=-4.5cm]
+ \matrix[nodes = { charge }, row sep = 5mm, column sep = 1cm] {
+ \node[positive] (NW) {}; & \node[negative] (N) {}; & \node [positive] (NE) {}; \\
+ \node[negative] (W) {}; & \node[positive] {}; & \node [negative] (E) {}; \\
+ \node[positive] (SW) {}; & \node[negative] (S) {}; & \node [positive] (SE) {}; \\
+ };
+
+ \foreach \d in {NW, N, NE} {
+ \draw[orange, very thick, <-] (\d) to ++(0,.7);
+ }
+
+ \foreach \d in {SW, S, SE} {
+ \draw[orange, very thick, <-] (\d) to ++(0,-.7);
+ }
+
+ \draw[gray, dashed] (W) to (N) to (E) to (S) to (W);
+ \end{scope}
+ \pause
+
+ \begin{scope}[xshift=11cm]
+ \foreach \x/\t [count=\i] in {60/positive, 120/negative, 180/positive, 240/negative, 300/positive, 360/negative} {
+ \node[charge, \t] (C\i) at (\x:1.5cm) {};
+ }
+
+ \draw[white] (C1) to (C2) to (C3) to (C4) to (C5) to (C6) to (C1);
+ % \draw[gray, dashed] (C2) to (C4) to (C6) to (C2);
+ \end{scope}
+ \pause
+
+ \begin{scope}[xshift=11cm, yshift=-4.5cm]
+ \node[charge, positive, yshift= 2.5mm] (C1) at ( 60:1.5cm) {};
+ \node[charge, negative, yshift= 2.5mm] (C2) at (120:1.5cm) {};
+ \node[charge, positive, xshift= 2.5mm] (C3) at (180:1.5cm) {};
+ \node[charge, negative, yshift=-2.5mm] (C4) at (240:1.5cm) {};
+ \node[charge, positive, yshift=-2.5mm] (C5) at (300:1.5cm) {};
+ \node[charge, negative, xshift=-2.5mm] (C6) at (360:1.5cm) {};
+
+ \draw[white] (C1) to (C2) to (C3) to (C4) to (C5) to (C6) to (C1);
+ % \draw[gray, dashed] (C2) to (C4) to (C6) to (C2);
+
+ \draw[orange, very thick, <-] (C6) to ++(.7,0);
+ \draw[orange, very thick, <-] (C3) to ++(-.7,0);
+
+ \node[white] (E) {\(\vec{E}_p\)};
+ \begin{scope}[node distance = .5mm]
+ \node[red!50, right = of E] {\(+\)};
+ \node[blue!50, left = of E] {\(-\)};
+ \end{scope}
+ \draw[gray, thick, dotted] (E) to ++(0,2);
+ \draw[gray, thick, dotted] (E) to ++(0,-2);
+ \end{scope}
+ \pause
+
+ \begin{scope}[xshift=5.5cm, yshift=-4.5cm]
+ \node[charge, positive, yshift=-2.5mm] (C1) at ( 60:1.5cm) {};
+ \node[charge, negative, yshift=-2.5mm] (C2) at (120:1.5cm) {};
+ \node[charge, positive, xshift=-2.5mm] (C3) at (180:1.5cm) {};
+ \node[charge, negative, yshift= 2.5mm] (C4) at (240:1.5cm) {};
+ \node[charge, positive, yshift= 2.5mm] (C5) at (300:1.5cm) {};
+ \node[charge, negative, xshift= 2.5mm] (C6) at (360:1.5cm) {};
+
+ \draw[white] (C1) to (C2) to (C3) to (C4) to (C5) to (C6) to (C1);
+ % \draw[gray, dashed] (C2) to (C4) to (C6) to (C2);
+
+ \foreach \d in {C1, C2} {
+ \draw[orange, very thick, <-] (\d) to ++(0,.7);
+ }
+
+ \foreach \d in {C4, C5} {
+ \draw[orange, very thick, <-] (\d) to ++(0,-.7);
+ }
+
+ \node[white] (E) {\(\vec{E}_p\)};
+ \begin{scope}[node distance = .5mm]
+ \node[red!50, right = of E] {\(+\)};
+ \node[blue!50, left = of E] {\(-\)};
+ \end{scope}
+ \draw[gray, thick, dotted] (E) to ++(0,2);
+ \draw[gray, thick, dotted] (E) to ++(0,-2);
+ \end{scope}
+ \end{tikzpicture}
+\end{frame}
+
+\frame{
+ \frametitle{Licht in Kristallen}
+ \begin{columns}[T]
+ \begin{column}{.5\textwidth}
+ Symmetriegruppe und Darstellung
+ \begin{align*}
+ G &= \left\{\mathbb{1}, r, \sigma, \dots \right\} \\
+ &\Phi : G \to O(n)
+ \end{align*}
+ \begin{align*}
+ U_\lambda &= \left\{ v : \Phi v = \lambda v \right\} \\
+ &= \mathrm{null}\left(\Phi - \lambda I\right)
+ \end{align*}
+ Helmholtz Wellengleichung
+ \[
+ \nabla^2 \vec{E} = \ten{\varepsilon}\mu
+ \frac{\partial^2}{\partial t^2} \vec{E}
+ \]
+ \end{column}
+ \begin{column}{.5\textwidth}
+ Ebene Welle
+ \[
+ \vec{E} = \vec{E}_0 \exp\left[i
+ \left(\vec{k}\cdot\vec{r} - \omega t \right)\right]
+ \]
+ Anisotropisch Dielektrikum
+ \[
+ (\ten{K}\ten{\varepsilon})\vec{E} = \frac{k^2}{\mu \omega^2} \vec{E}
+ \]
+ \[
+ \vec{E} \in U_\lambda \implies (\ten{K}\ten{\varepsilon}) \vec{E} = \lambda \vec{E}
+ \]
+ \end{column}
+ \end{columns}
+}
+
+\end{document}