flash through pi creature class working

This commit is contained in:
Ben Hambrecht 2018-05-08 23:55:47 +02:00
parent 9a4b0dc773
commit 8207687a61
4 changed files with 88 additions and 40 deletions

View file

@ -2,11 +2,12 @@ from big_ol_pile_of_manim_imports import *
from active_projects.eop.reusable_imports import *
from active_projects.eop.independence import *
from for_3b1b_videos.pi_class import *
from for_3b1b_videos.pi_class import PiCreatureClass
class QuizResult(PiCreatureScene):
CONFIG = {
"pi_creatures_start_on_screen" : False
"pi_creatures_start_on_screen" : False,
"random_seed" : 6
}
def construct(self):
@ -182,8 +183,8 @@ class QuizResult(PiCreatureScene):
prob_label.move_to(percentage_label)
self.play(
all_students[8].set_color, MAROON_E,
all_students[:8].fade, 0.6,
all_students[9:].fade, 0.6,
#all_students[:8].fade, 0.6,
#all_students[9:].fade, 0.6,
ReplacementTransform(percentage_label, prob_label)
)
@ -192,18 +193,32 @@ class QuizResult(PiCreatureScene):
FadeOut(arrows)
)
for i in range(1):
self.play(
FlashThroughHistogram(
flash_hist = FlashThroughHistogram(
grade_hist,
direction = "vertical",
mode = "random",
cell_opacity = 0.5,
run_time = 1
),
FlashThroughClass(
run_time = 5,
rate_func = linear
)
flash_class = FlashThroughClass(
all_students,
mode = "random",
run_time = 5
highlight_color = MAROON_E,
run_time = 5,
rate_func = linear
)
)
for i in range(3):
self.play(flash_hist, flash_class)
self.remove(flash_hist.prototype_cell)

View file

@ -201,7 +201,10 @@ class FlashThroughHistogram(Animation):
"hist_opacity" : 0.2
}
def __init__(self, mobject, direction = "horizontal", mode = "random", **kwargs):
def __init__(self, mobject,
direction = "horizontal",
mode = "random",
**kwargs):
digest_config(self, kwargs)
@ -277,14 +280,14 @@ class FlashThroughHistogram(Animation):
self.mobject.remove(self.prototype_cell)
def clean_up(self):
def clean_up(self, surrounding_scene = None):
Animation.clean_up(self, surrounding_scene)
self.update(1)
self.remove(prototype_cell)
if surrounding_scene is not None:
if self.is_remover():
surrounding_scene.remove(self.mobject)
surrounding_scene.remove(self.prototype_cell)
else:
surrounding_scene.add(self.mobject)
surrounding_scene.add(self.prototype_cell)
return self

View file

@ -1,4 +1,10 @@
from for_3b1b_videos.pi_creature import *
import numpy as np
import warnings
from constants import *
from mobject.types.vectorized_mobject import VGroup
from for_3b1b_videos.pi_creature import PiCreature
class PiCreatureClass(VGroup):
CONFIG = {
@ -15,25 +21,3 @@ class PiCreatureClass(VGroup):
self.add(pi)
def FlashThroughClass(Animation):
CONFIG = {
"highlight_color" : GREEN,
}
def __init__(self, mobject, mode = "linear", **kwargs):
digest_config(self, kwargs)
self.indices = range(self.height * self.width)
if mode == "random":
np.random.shuffle(self.indices)
Animation.__init__(self, mobject, **kwargs)
def update_mobject(self, alpha):
index = int(np.floor(alpha * self.height * self.width))
for pi in self.mobject:
pi.set_color(BLUE_E)
self.mobject[index].set_color(self.highlight_color)

View file

@ -6,6 +6,7 @@ from mobject.mobject import Group
from mobject.svg.drawings import SpeechBubble
from animation.animation import Animation
from animation.creation import ShowCreation
from animation.creation import Write
from animation.composition import AnimationGroup
@ -16,6 +17,8 @@ from utils.config_ops import digest_config
from utils.rate_functions import squish_rate_func
from utils.rate_functions import there_and_back
from for_3b1b_videos.pi_class import PiCreatureClass
class Blink(ApplyMethod):
CONFIG = {
@ -101,3 +104,46 @@ class RemovePiCreatureBubble(AnimationGroup):
self.pi_creature.bubble = None
if surrounding_scene is not None:
surrounding_scene.add(self.pi_creature)
class FlashThroughClass(Animation):
CONFIG = {
"highlight_color" : GREEN,
}
def __init__(self, mobject, mode = "linear", **kwargs):
if not isinstance(mobject, PiCreatureClass):
raise Exception("FlashThroughClass mobject must be a PiCreatureClass")
digest_config(self, kwargs)
self.indices = range(mobject.height * mobject.width)
if mode == "random":
np.random.shuffle(self.indices)
Animation.__init__(self, mobject, **kwargs)
def update_mobject(self, alpha):
index = int(np.floor(alpha * self.mobject.height * self.mobject.width))
for pi in self.mobject:
pi.set_color(BLUE_E)
if index < self.mobject.height * self.mobject.width:
self.mobject[self.indices[index]].set_color(self.highlight_color)