mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
Began clacks solution animations (just for the recap scenes, so mostly carried over from clacks)
This commit is contained in:
parent
ee52eae965
commit
c735119367
2 changed files with 106 additions and 9 deletions
|
@ -3,9 +3,6 @@ import subprocess
|
||||||
from pydub import AudioSegment
|
from pydub import AudioSegment
|
||||||
|
|
||||||
|
|
||||||
MIN_TIME_BETWEEN_FLASHES = 0.004
|
|
||||||
|
|
||||||
|
|
||||||
class SlidingBlocks(VGroup):
|
class SlidingBlocks(VGroup):
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
"block1_config": {
|
"block1_config": {
|
||||||
|
@ -225,6 +222,7 @@ class ClackFlashes(ContinualAnimation):
|
||||||
"flash_radius": 0.2,
|
"flash_radius": 0.2,
|
||||||
},
|
},
|
||||||
"start_up_time": 0,
|
"start_up_time": 0,
|
||||||
|
"min_time_between_flashes": 1 / 30,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, clack_data, **kwargs):
|
def __init__(self, clack_data, **kwargs):
|
||||||
|
@ -233,7 +231,7 @@ class ClackFlashes(ContinualAnimation):
|
||||||
group = Group()
|
group = Group()
|
||||||
last_time = 0
|
last_time = 0
|
||||||
for location, time in clack_data:
|
for location, time in clack_data:
|
||||||
if (time - last_time) < MIN_TIME_BETWEEN_FLASHES:
|
if (time - last_time) < self.min_time_between_flashes:
|
||||||
continue
|
continue
|
||||||
last_time = time
|
last_time = time
|
||||||
flash = Flash(location, **self.flash_config)
|
flash = Flash(location, **self.flash_config)
|
||||||
|
@ -268,6 +266,7 @@ class BlocksAndWallScene(Scene):
|
||||||
"counter_label": "\\# Collisions: ",
|
"counter_label": "\\# Collisions: ",
|
||||||
"collision_sound": "clack.wav",
|
"collision_sound": "clack.wav",
|
||||||
"show_flash_animations": True,
|
"show_flash_animations": True,
|
||||||
|
"min_time_between_sounds": 0.004,
|
||||||
}
|
}
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
|
@ -359,7 +358,7 @@ class BlocksAndWallScene(Scene):
|
||||||
total_time = max(times) + 1
|
total_time = max(times) + 1
|
||||||
clacks = AudioSegment.silent(int(1000 * total_time))
|
clacks = AudioSegment.silent(int(1000 * total_time))
|
||||||
last_position = 0
|
last_position = 0
|
||||||
min_diff = int(1000 * MIN_TIME_BETWEEN_FLASHES)
|
min_diff = int(1000 * self.min_time_between_sounds)
|
||||||
for time in times:
|
for time in times:
|
||||||
position = int(1000 * time)
|
position = int(1000 * time)
|
||||||
d_position = position - last_position
|
d_position = position - last_position
|
||||||
|
|
|
@ -3,9 +3,47 @@ from active_projects.clacks import *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class LastVideo(Scene):
|
# TODO, add solution image
|
||||||
|
class FromPuzzleToSolution(MovingCameraScene):
|
||||||
def construct(self):
|
def construct(self):
|
||||||
pass
|
big_rect = FullScreenFadeRectangle()
|
||||||
|
big_rect.set_fill(DARK_GREY, 0.5)
|
||||||
|
self.add(big_rect)
|
||||||
|
|
||||||
|
rects = VGroup(ScreenRectangle(), ScreenRectangle())
|
||||||
|
rects.set_height(3)
|
||||||
|
rects.arrange_submobjects(RIGHT, buff=2)
|
||||||
|
|
||||||
|
titles = VGroup(
|
||||||
|
TextMobject("Puzzle"),
|
||||||
|
TextMobject("Solution"),
|
||||||
|
)
|
||||||
|
|
||||||
|
images = Group(
|
||||||
|
ImageMobject("BlocksAndWallExampleMass16"),
|
||||||
|
ImageMobject("SphereSurfaceProof2"), # TODO
|
||||||
|
)
|
||||||
|
for title, rect, image in zip(titles, rects, images):
|
||||||
|
title.scale(1.5)
|
||||||
|
title.next_to(rect, UP)
|
||||||
|
image.replace(rect)
|
||||||
|
self.add(image, rect, title)
|
||||||
|
|
||||||
|
frame = self.camera_frame
|
||||||
|
frame.save_state()
|
||||||
|
|
||||||
|
self.play(
|
||||||
|
frame.replace, images[0],
|
||||||
|
run_time=3
|
||||||
|
)
|
||||||
|
self.wait()
|
||||||
|
self.play(Restore(frame, run_time=3))
|
||||||
|
self.play(
|
||||||
|
frame.replace, images[1],
|
||||||
|
run_time=3,
|
||||||
|
)
|
||||||
|
self.wait()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BlocksAndWallExampleMass16(BlocksAndWallExample):
|
class BlocksAndWallExampleMass16(BlocksAndWallExample):
|
||||||
|
@ -20,7 +58,6 @@ class BlocksAndWallExampleMass16(BlocksAndWallExample):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Mass16WithElasticLabel(Mass1e1WithElasticLabel):
|
class Mass16WithElasticLabel(Mass1e1WithElasticLabel):
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
"sliding_blocks_config": {
|
"sliding_blocks_config": {
|
||||||
|
@ -40,4 +77,65 @@ class BlocksAndWallExampleMass64(BlocksAndWallExample):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"wait_time": 25,
|
"wait_time": 25,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class BlocksAndWallExampleMass1e4(BlocksAndWallExample):
|
||||||
|
CONFIG = {
|
||||||
|
"sliding_blocks_config": {
|
||||||
|
"block1_config": {
|
||||||
|
"mass": 64,
|
||||||
|
"velocity": -1.5,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"wait_time": 25,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class BlocksAndWallExampleMassMillion(BlocksAndWallExample):
|
||||||
|
CONFIG = {
|
||||||
|
"sliding_blocks_config": {
|
||||||
|
"block1_config": {
|
||||||
|
"mass": 1e6,
|
||||||
|
"velocity": -0.9,
|
||||||
|
"label_text": "$100^{3}$ kg"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"wait_time": 30,
|
||||||
|
"million_fade_time": 4,
|
||||||
|
"min_time_between_sounds": 0.002,
|
||||||
|
}
|
||||||
|
|
||||||
|
def setup(self):
|
||||||
|
super().setup()
|
||||||
|
self.add_million_label()
|
||||||
|
|
||||||
|
def add_million_label(self):
|
||||||
|
first_label = self.blocks.block1.label
|
||||||
|
brace = Brace(first_label[:-2], UP, buff=SMALL_BUFF)
|
||||||
|
new_label = TexMobject("1{,}000{,}000")
|
||||||
|
new_label.next_to(brace, UP, buff=SMALL_BUFF)
|
||||||
|
new_label.add(brace)
|
||||||
|
new_label.set_color(YELLOW)
|
||||||
|
|
||||||
|
def update_label(label):
|
||||||
|
d_time = self.get_time() - self.million_fade_time
|
||||||
|
opacity = smooth(d_time)
|
||||||
|
label.set_fill(opacity=d_time)
|
||||||
|
|
||||||
|
new_label.add_updater(update_label)
|
||||||
|
first_label.add(new_label)
|
||||||
|
|
||||||
|
|
||||||
|
class BlocksAndWallExampleMassTrillion(BlocksAndWallExample):
|
||||||
|
CONFIG = {
|
||||||
|
"sliding_blocks_config": {
|
||||||
|
"block1_config": {
|
||||||
|
"mass": 1e12,
|
||||||
|
"velocity": -1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"wait_time": 30,
|
||||||
|
"min_time_between_sounds": 0.001,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue