Skip to content

Commit

Permalink
Add clock hand rotations
Browse files Browse the repository at this point in the history
  • Loading branch information
marekkirejczyk committed Jun 17, 2023
1 parent d745c5a commit dbbec1b
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 14 deletions.
17 changes: 17 additions & 0 deletions zkmarek/video/mobjects/fill_angle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from manim import (DEGREES, GREEN, ORIGIN, UP, Angle, Line,
VMobject)
from numpy import concatenate

class FillAngle(VMobject):
def __init__(self, length = 2, fillcolor = GREEN, deg1 = 0, deg2 = 90):
super().__init__()
l1 = Line(ORIGIN, length * UP).rotate(-deg1 * DEGREES, about_point=ORIGIN)
l2 = Line(ORIGIN, length * UP).rotate(-deg2 * DEGREES, about_point=ORIGIN)
norm = l1.get_length()
a1 = Angle(l1, l2, other_angle=True, radius=norm - 0.5).set_color(GREEN)
a2 = Angle(l1, l2, other_angle=True, radius=norm).set_color(GREEN)
q1 = a1.points
q2 = a2.reverse_direction().points
pnts = concatenate([q1, q2, q1[0].reshape(1, 3)])
self.set_color(fillcolor)
self.set_points_as_corners(pnts).set_fill(GREEN, opacity=1)
48 changes: 34 additions & 14 deletions zkmarek/video/slides/prime_fields.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,47 @@
from manim import LEFT, Transform
from typing import Optional

from manim import LEFT, FadeIn, FadeOut, Transform
from zkmarek.video.mobjects.clock import Clock
from zkmarek.video.mobjects.fill_angle import FillAngle
from zkmarek.video.mobjects.sidebar import Sidebar
from typing import Optional

from .common.slide_base import SlideBase


class PrimeFields(SlideBase):
clock: Optional[Clock] = None
sidebar: Sidebar

def __init__(self):
super().__init__(title="Prime Fields")

def construct(self):
self.clock = Clock(hour=9)
self.clock2 = Clock(use_zero=True, hour=9)
self.clock3 = Clock(use_zero=True, hour=31, modulus=41)
self.sidebar = Sidebar("Prime Field", code_path="data/pf/field.py")

def animate_in(self, scene):
self.clock.animate_in(scene)
scene.play(Transform(self.clock, self.clock2))
scene.remove(self.clock)
scene.play(Transform(self.clock2, self.clock3))
scene.remove(self.clock2)
scene.play(self.clock3.animate.align_on_border(LEFT, buff=0.2))
clock = Clock(hour=9)
clock.set_z_index(3)
clock.animate_in(scene)
angle = FillAngle(deg1=270, deg2=330)
scene.play(FadeIn(angle))

clock2 = Clock(hour=11)
scene.play(Transform(clock, clock2))
scene.play(FadeOut(angle))

angle2 = FillAngle(deg1=330, deg2=30)
scene.play(FadeIn(angle2))
clock3 = Clock(hour=1)
scene.remove(clock)
scene.play(Transform(clock2, clock3))
scene.play(FadeOut(angle2))

scene.remove(clock2)
clock4 = Clock(use_zero=True, hour=1)
scene.play(Transform(clock3, clock4))

scene.remove(clock3)
clock5 = Clock(use_zero=True, hour=4, modulus=41)
scene.play(Transform(clock4, clock5))

scene.remove(clock4)
scene.play(clock5.animate.align_on_border(LEFT, buff=0.2))
self.sidebar = Sidebar("Prime Field", code_path="data/pf/field.py")
self.sidebar.animate_in(scene)

0 comments on commit dbbec1b

Please sign in to comment.