mirror of
https://github.com/3b1b/manim.git
synced 2025-11-14 22:57:44 +00:00
made BrickRowScene reusable for EntireBrickWall
This commit is contained in:
parent
d4f3d3c584
commit
903e561a87
1 changed files with 49 additions and 47 deletions
|
|
@ -5,7 +5,7 @@ from active_projects.eop.reusable_imports import *
|
|||
class BrickRowScene(PiCreatureScene):
|
||||
|
||||
|
||||
def split_tallies(self, direction = DOWN):
|
||||
def split_tallies(self, row, direction = DOWN):
|
||||
# Split all tally symbols at once and move the copies
|
||||
# either horizontally on top of the brick row
|
||||
# or diagonally into the bricks
|
||||
|
|
@ -15,12 +15,12 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
tally_targets_left = [
|
||||
rect.get_center() + 0.25 * rect.get_width() * LEFT
|
||||
for rect in self.row.rects
|
||||
for rect in row.rects
|
||||
]
|
||||
|
||||
tally_targets_right = [
|
||||
rect.get_center() + 0.25 * rect.get_width() * RIGHT
|
||||
for rect in self.row.rects
|
||||
for rect in row.rects
|
||||
]
|
||||
|
||||
if np.all(direction == LEFT) or np.all(direction == RIGHT):
|
||||
|
|
@ -63,7 +63,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
|
||||
|
||||
def tally_split_animations(self, direction = DOWN):
|
||||
def tally_split_animations(self, row, direction = DOWN):
|
||||
# Just creates the animations and returns them
|
||||
# Execution can be timed afterwards
|
||||
# Returns two lists: first all those going left, then those to the right
|
||||
|
|
@ -73,12 +73,12 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
tally_targets_left = [
|
||||
rect.get_center() + 0.25 * rect.get_width() * LEFT
|
||||
for rect in self.row.rects
|
||||
for rect in row.rects
|
||||
]
|
||||
|
||||
tally_targets_right = [
|
||||
rect.get_center() + 0.25 * rect.get_width() * RIGHT
|
||||
for rect in self.row.rects
|
||||
for rect in row.rects
|
||||
]
|
||||
|
||||
if np.all(direction == LEFT) or np.all(direction == RIGHT):
|
||||
|
|
@ -122,13 +122,14 @@ class BrickRowScene(PiCreatureScene):
|
|||
return anims1, anims2
|
||||
|
||||
|
||||
def split_tallies_at_once(self, direction = DOWN):
|
||||
anims1, anims2 = self.tally_split_animations(direction = direction)
|
||||
|
||||
def split_tallies_at_once(self, row, direction = DOWN):
|
||||
anims1, anims2 = self.tally_split_animations(row, direction = direction)
|
||||
self.play(*(anims1 + anims2))
|
||||
|
||||
def split_tallies_in_two_steps(self, direction = DOWN):
|
||||
def split_tallies_in_two_steps(self, row, direction = DOWN):
|
||||
# First all those to the left, then those to the right
|
||||
anims1, anims2 = self.tally_split_animations(direction = direction)
|
||||
anims1, anims2 = self.tally_split_animations(row, direction = direction)
|
||||
self.play(*anims1)
|
||||
self.wait(0.3)
|
||||
self.play(*anims2)
|
||||
|
|
@ -136,31 +137,31 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
|
||||
|
||||
def merge_rects_by_subdiv(self):
|
||||
def merge_rects_by_subdiv(self, row):
|
||||
|
||||
half_merged_row = self.row.copy()
|
||||
half_merged_row = row.copy()
|
||||
half_merged_row.subdiv_level += 1
|
||||
half_merged_row.generate_points()
|
||||
half_merged_row.move_to(self.row)
|
||||
half_merged_row.move_to(row)
|
||||
|
||||
self.play(FadeIn(half_merged_row))
|
||||
self.remove(self.row)
|
||||
self.row = half_merged_row
|
||||
self.remove(row)
|
||||
return half_merged_row
|
||||
|
||||
|
||||
|
||||
|
||||
def merge_tallies(self, target_pos = UP):
|
||||
def merge_tallies(self, row, target_pos = UP):
|
||||
|
||||
r = self.row.subdiv_level
|
||||
r = row.subdiv_level
|
||||
|
||||
if np.all(target_pos == DOWN):
|
||||
tally_targets = [
|
||||
rect.get_center()
|
||||
for rect in self.row.get_rects_for_level(r)
|
||||
for rect in row.get_rects_for_level(r)
|
||||
]
|
||||
elif np.all(target_pos == UP):
|
||||
y_pos = self.row.get_center()[1] + 1.2 * 0.5 * self.row.get_height()
|
||||
y_pos = row.get_center()[1] + 1.2 * 0.5 * row.get_height()
|
||||
for target in tally_targets:
|
||||
target[1] = y_pos
|
||||
else:
|
||||
|
|
@ -186,25 +187,25 @@ class BrickRowScene(PiCreatureScene):
|
|||
self.tallies.add(self.tallies_copy[-1])
|
||||
|
||||
|
||||
def merge_rects_by_coloring(self):
|
||||
def merge_rects_by_coloring(self, row):
|
||||
|
||||
merged_row = self.row.copy()
|
||||
merged_row = row.copy()
|
||||
merged_row.coloring_level += 1
|
||||
merged_row.generate_points()
|
||||
merged_row.move_to(self.row)
|
||||
merged_row.move_to(row)
|
||||
|
||||
self.play(FadeIn(merged_row))
|
||||
self.remove(self.row)
|
||||
self.row = merged_row
|
||||
self.remove(row)
|
||||
return merged_row
|
||||
|
||||
|
||||
|
||||
def move_tallies_on_top(self):
|
||||
def move_tallies_on_top(self, row):
|
||||
self.play(
|
||||
self.tallies.shift, 1.2 * 0.5 * self.row.height * UP
|
||||
self.tallies.shift, 1.2 * 0.5 * row.height * UP
|
||||
)
|
||||
for tally in self.tallies:
|
||||
tally.anchor += 1.2 * 0.5 * self.row.height * UP
|
||||
tally.anchor += 1.2 * 0.5 * row.height * UP
|
||||
|
||||
def create_pi_creature(self):
|
||||
randy = CoinFlippingPiCreature(color = MAROON_E)
|
||||
|
|
@ -256,12 +257,11 @@ class BrickRowScene(PiCreatureScene):
|
|||
# # # # # # # #
|
||||
|
||||
|
||||
|
||||
self.play(FlipCoin(randy))
|
||||
|
||||
self.play(SplitRectsInBrickWall(self.row))
|
||||
self.merge_rects_by_subdiv()
|
||||
self.merge_rects_by_coloring()
|
||||
self.row = self.merge_rects_by_subdiv(self.row)
|
||||
self.row = self.merge_rects_by_coloring(self.row)
|
||||
#
|
||||
# put tallies on top
|
||||
|
||||
|
|
@ -312,7 +312,6 @@ class BrickRowScene(PiCreatureScene):
|
|||
new_tails[i].shift(COIN_SEQUENCE_SPACING * DOWN)
|
||||
self.play(FadeIn(new_tails))
|
||||
|
||||
|
||||
decimal_tallies = VGroup()
|
||||
# introduce notion of tallies
|
||||
for (i, rect) in enumerate(self.row.get_rects_for_level(2)):
|
||||
|
|
@ -347,6 +346,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
)
|
||||
self.wait()
|
||||
|
||||
|
||||
self.tallies = VGroup()
|
||||
for (i, rect) in enumerate(self.row.get_rects_for_level(2)):
|
||||
tally = TallyStack(2-i, i, show_decimals = False)
|
||||
|
|
@ -357,6 +357,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
self.play(FadeIn(self.tallies))
|
||||
self.wait()
|
||||
|
||||
|
||||
anims = []
|
||||
for (decimal_tally, tally_stack) in zip(decimal_tallies, self.tallies):
|
||||
anims.append(ApplyFunction(
|
||||
|
|
@ -366,6 +367,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
self.play(*anims)
|
||||
self.wait()
|
||||
|
||||
|
||||
# replace the original decimal tallies with
|
||||
# the ones that belong to the TallyStacks
|
||||
for (decimal_tally, tally_stack) in zip(decimal_tallies, self.tallies):
|
||||
|
|
@ -374,9 +376,9 @@ class BrickRowScene(PiCreatureScene):
|
|||
tally_stack.add(tally_stack.decimal_tally)
|
||||
|
||||
self.add_foreground_mobject(self.tallies)
|
||||
self.merge_rects_by_subdiv()
|
||||
self.row = self.merge_rects_by_subdiv(self.row)
|
||||
self.wait()
|
||||
self.merge_rects_by_coloring()
|
||||
self.row = self.merge_rects_by_coloring(self.row)
|
||||
self.wait()
|
||||
|
||||
|
||||
|
|
@ -494,7 +496,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
)
|
||||
self.wait()
|
||||
|
||||
self.split_tallies_in_two_steps()
|
||||
self.split_tallies_in_two_steps(self.row)
|
||||
self.wait()
|
||||
|
||||
self.add_foreground_mobject(self.tallies)
|
||||
|
|
@ -554,7 +556,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
# self.wait()
|
||||
|
||||
# self.merge_rects_by_subdiv()
|
||||
# self.row = self.merge_rects_by_subdiv(self.row)
|
||||
# self.wait()
|
||||
|
||||
# self.play(
|
||||
|
|
@ -575,9 +577,9 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
# self.wait()
|
||||
|
||||
# self.merge_tallies(target_pos = DOWN)
|
||||
# self.merge_tallies(self.row, target_pos = DOWN)
|
||||
# self.add_foreground_mobject(self.tallies)
|
||||
# self.merge_rects_by_coloring()
|
||||
# self.row = self.merge_rects_by_coloring(self.row)
|
||||
# self.wait()
|
||||
|
||||
|
||||
|
|
@ -645,7 +647,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
self.wait()
|
||||
|
||||
self.merge_rects_by_subdiv()
|
||||
self.row = self.merge_rects_by_subdiv(self.row)
|
||||
self.wait()
|
||||
|
||||
self.play(
|
||||
|
|
@ -666,9 +668,9 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
self.wait()
|
||||
|
||||
self.merge_tallies(target_pos = DOWN)
|
||||
self.merge_tallies(self.row, target_pos = DOWN)
|
||||
self.add_foreground_mobject(self.tallies)
|
||||
self.merge_rects_by_coloring()
|
||||
self.row = self.merge_rects_by_coloring(self.row)
|
||||
self.wait()
|
||||
|
||||
|
||||
|
|
@ -759,7 +761,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
)
|
||||
self.wait()
|
||||
|
||||
self.merge_rects_by_subdiv()
|
||||
self.row = self.merge_rects_by_subdiv(self.row)
|
||||
|
||||
self.wait()
|
||||
|
||||
|
|
@ -876,7 +878,7 @@ class BrickRowScene(PiCreatureScene):
|
|||
FadeOut(self.tallies),
|
||||
)
|
||||
|
||||
self.merge_rects_by_coloring()
|
||||
self.row = self.merge_rects_by_coloring(self.row)
|
||||
|
||||
self.play(
|
||||
FadeIn(new_tallies[0]),
|
||||
|
|
@ -886,9 +888,9 @@ class BrickRowScene(PiCreatureScene):
|
|||
|
||||
|
||||
|
||||
# # # # # # # #
|
||||
# FIFTH FLIP #
|
||||
# # # # # # # #
|
||||
# # # # # # # # # #
|
||||
# EVEN MORE FLIPS #
|
||||
# # # # # # # # # #
|
||||
|
||||
self.play(FadeOut(new_tallies))
|
||||
self.clear()
|
||||
|
|
@ -909,9 +911,9 @@ class BrickRowScene(PiCreatureScene):
|
|||
SplitRectsInBrickWall(self.row)
|
||||
)
|
||||
self.wait()
|
||||
self.merge_rects_by_subdiv()
|
||||
self.row = self.merge_rects_by_subdiv(self.row)
|
||||
self.wait()
|
||||
self.merge_rects_by_coloring()
|
||||
self.row = self.merge_rects_by_coloring(self.row)
|
||||
self.wait()
|
||||
|
||||
self.play(FadeOut(previous_row))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue