mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
Get rid of ContinualMovement, replace with always_shift
This commit is contained in:
parent
04b4c1dad8
commit
1eb8180d3d
11 changed files with 41 additions and 181 deletions
|
@ -68,13 +68,3 @@ class ContinualAnimationGroup(ContinualAnimation):
|
||||||
def update_mobject(self, dt):
|
def update_mobject(self, dt):
|
||||||
for continual_animation in self.continual_animations:
|
for continual_animation in self.continual_animations:
|
||||||
continual_animation.update(dt)
|
continual_animation.update(dt)
|
||||||
|
|
||||||
|
|
||||||
class ContinualMovement(ContinualAnimation):
|
|
||||||
CONFIG = {
|
|
||||||
"direction": RIGHT,
|
|
||||||
"rate": 0.05, # Units per second
|
|
||||||
}
|
|
||||||
|
|
||||||
def update_mobject(self, dt):
|
|
||||||
self.mobject.shift(dt * self.rate * self.direction)
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ from manimlib.animation.creation import Write
|
||||||
from manimlib.animation.fading import FadeIn
|
from manimlib.animation.fading import FadeIn
|
||||||
from manimlib.animation.fading import FadeOut
|
from manimlib.animation.fading import FadeOut
|
||||||
from manimlib.constants import *
|
from manimlib.constants import *
|
||||||
from manimlib.continual_animation.continual_animation import ContinualMovement
|
|
||||||
from manimlib.for_3b1b_videos.pi_creature import Mortimer
|
from manimlib.for_3b1b_videos.pi_creature import Mortimer
|
||||||
from manimlib.for_3b1b_videos.pi_creature import Randolph
|
from manimlib.for_3b1b_videos.pi_creature import Randolph
|
||||||
from manimlib.for_3b1b_videos.pi_creature_animations import Blink
|
from manimlib.for_3b1b_videos.pi_creature_animations import Blink
|
||||||
|
@ -19,6 +18,7 @@ from manimlib.mobject.svg.drawings import Logo
|
||||||
from manimlib.mobject.svg.drawings import PatreonLogo
|
from manimlib.mobject.svg.drawings import PatreonLogo
|
||||||
from manimlib.mobject.svg.tex_mobject import TextMobject
|
from manimlib.mobject.svg.tex_mobject import TextMobject
|
||||||
from manimlib.mobject.types.vectorized_mobject import VGroup
|
from manimlib.mobject.types.vectorized_mobject import VGroup
|
||||||
|
from manimlib.mobject.mobject_update_utils import always_shift
|
||||||
from manimlib.scene.moving_camera_scene import MovingCameraScene
|
from manimlib.scene.moving_camera_scene import MovingCameraScene
|
||||||
from manimlib.scene.scene import Scene
|
from manimlib.scene.scene import Scene
|
||||||
from manimlib.utils.rate_functions import linear
|
from manimlib.utils.rate_functions import linear
|
||||||
|
@ -243,13 +243,13 @@ class PatreonEndScreen(PatreonThanks, PiCreatureScene):
|
||||||
vect = columns.target.get_center() - columns.get_center()
|
vect = columns.target.get_center() - columns.get_center()
|
||||||
distance = get_norm(vect)
|
distance = get_norm(vect)
|
||||||
wait_time = 20
|
wait_time = 20
|
||||||
columns_shift = ContinualMovement(
|
always_shift(
|
||||||
columns,
|
columns,
|
||||||
direction=normalize(vect),
|
direction=normalize(vect),
|
||||||
rate=(distance / wait_time)
|
rate=(distance / wait_time)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.add(columns_shift, black_rect, line, thanks)
|
self.add(columns, black_rect, line, thanks)
|
||||||
self.wait(wait_time)
|
self.wait(wait_time)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,11 @@ def always_shift(mobject, direction=RIGHT, rate=0.1):
|
||||||
mobject.add_updater(
|
mobject.add_updater(
|
||||||
lambda m, dt: m.shift(dt * rate * direction)
|
lambda m, dt: m.shift(dt * rate * direction)
|
||||||
)
|
)
|
||||||
|
return mobject
|
||||||
|
|
||||||
|
|
||||||
def always_rotate(mobject, rate=20 * DEGREES, **kwargs):
|
def always_rotate(mobject, rate=20 * DEGREES, **kwargs):
|
||||||
mobject.add_updater(
|
mobject.add_updater(
|
||||||
lambda m, dt: m.rotate(dt * rate, **kwargs)
|
lambda m, dt: m.rotate(dt * rate, **kwargs)
|
||||||
)
|
)
|
||||||
|
return mobject
|
||||||
|
|
|
@ -3074,130 +3074,6 @@ class MentionFree(PiCreatureScene):
|
||||||
self.play(morty.change, "gracious", OUT)
|
self.play(morty.change, "gracious", OUT)
|
||||||
self.wait(4)
|
self.wait(4)
|
||||||
|
|
||||||
class PatreonScroll(Scene):
|
|
||||||
CONFIG = {
|
|
||||||
"specific_patrons" : [
|
|
||||||
"Juan Benet",
|
|
||||||
"Chloe Zhou",
|
|
||||||
"Ross Garber",
|
|
||||||
"Desmos",
|
|
||||||
"Burt Humburg",
|
|
||||||
"CrypticSwarm",
|
|
||||||
"Sergei",
|
|
||||||
"Devin Scott",
|
|
||||||
"George John",
|
|
||||||
"Akash Kumar",
|
|
||||||
"Felix Tripier",
|
|
||||||
"Arthur Zey",
|
|
||||||
"David Kedmey",
|
|
||||||
"Ali Yahya",
|
|
||||||
"Mayank M. Mehrotra",
|
|
||||||
"Lukas Biewald",
|
|
||||||
"Yana Chernobilsky",
|
|
||||||
"Kaustuv DeBiswas",
|
|
||||||
"Yu Jun",
|
|
||||||
"Dave Nicponski",
|
|
||||||
"Damion Kistler",
|
|
||||||
"Patrick Mézard",
|
|
||||||
"Jordan Scales",
|
|
||||||
"Markus Persson",
|
|
||||||
"Britt Selvitelle",
|
|
||||||
"Jonathan Wilson",
|
|
||||||
"Ryan Atallah",
|
|
||||||
"Joseph John Cox",
|
|
||||||
"Luc Ritchie",
|
|
||||||
"Steven Tomlinson",
|
|
||||||
"Shìmín Ku$\\overline{\\text{a}}$ng",
|
|
||||||
"Jameel Syed",
|
|
||||||
"Bong Choung",
|
|
||||||
"Ignacio Freiberg",
|
|
||||||
"Zhilong Yang",
|
|
||||||
"Karl Niu",
|
|
||||||
"Dan Esposito (Guardion)",
|
|
||||||
"Giovanni Filippi",
|
|
||||||
"Eric Younge",
|
|
||||||
"Prasant Jagannath",
|
|
||||||
"Cody Brocious",
|
|
||||||
"Jacob Kohl",
|
|
||||||
"James H. Park",
|
|
||||||
"Norton Wang",
|
|
||||||
"Kevin Le",
|
|
||||||
"Alexander Feldman",
|
|
||||||
"Tianyu Ge",
|
|
||||||
"David MacCumber",
|
|
||||||
"Oliver Steele",
|
|
||||||
"Yaw Etse",
|
|
||||||
"David B",
|
|
||||||
"Waleed Hamied",
|
|
||||||
"George Chiesa",
|
|
||||||
"supershabam",
|
|
||||||
"Delton Ding",
|
|
||||||
"Thomas Tarler",
|
|
||||||
"Jonathan Eppele",
|
|
||||||
"Isak Hietala",
|
|
||||||
"1stViewMaths",
|
|
||||||
"Jacob Magnuson",
|
|
||||||
"Mark Govea",
|
|
||||||
"Clark Gaebel",
|
|
||||||
"Mathias Jansson",
|
|
||||||
"David Clark",
|
|
||||||
"Michael Gardner",
|
|
||||||
"Mads Elvheim",
|
|
||||||
"Awoo",
|
|
||||||
"Dr. David G. Stork",
|
|
||||||
"Ted Suzman",
|
|
||||||
"Linh Tran",
|
|
||||||
"Andrew Busey",
|
|
||||||
"John Haley",
|
|
||||||
"Ankalagon",
|
|
||||||
"Eric Lavault",
|
|
||||||
"Boris Veselinovich",
|
|
||||||
"Julian Pulgarin",
|
|
||||||
"Jeff Linse",
|
|
||||||
"Cooper Jones",
|
|
||||||
"Ryan Dahl",
|
|
||||||
"Robert Teed",
|
|
||||||
"Jason Hise",
|
|
||||||
"Meshal Alshammari",
|
|
||||||
"Bernd Sing",
|
|
||||||
"James Thornton",
|
|
||||||
"Mustafa Mahdi",
|
|
||||||
"Mathew Bramson",
|
|
||||||
"Jerry Ling",
|
|
||||||
"Mèngzi Yì",
|
|
||||||
"Rish Kundalia",
|
|
||||||
"Achille Brighton",
|
|
||||||
"Ripta Pasay",
|
|
||||||
],
|
|
||||||
"random_seed" : 1,
|
|
||||||
}
|
|
||||||
def construct(self):
|
|
||||||
patreon_logo = PatreonLogo()
|
|
||||||
patreon_logo.to_corner(UP+RIGHT)
|
|
||||||
patreon_logo.shift(SMALL_BUFF*LEFT)
|
|
||||||
self.add(patreon_logo)
|
|
||||||
|
|
||||||
patrons = VGroup(*list(map(TextMobject, self.specific_patrons)))
|
|
||||||
patrons.scale(0.75)
|
|
||||||
random.shuffle(patrons.submobjects)
|
|
||||||
patrons.arrange(DOWN, aligned_edge = LEFT)
|
|
||||||
patrons.next_to(ORIGIN, DOWN)
|
|
||||||
patrons.to_edge(RIGHT)
|
|
||||||
|
|
||||||
# patorons = patrons[:10] ##TO remove
|
|
||||||
|
|
||||||
scroll = ContinualMovement(patrons, direction = UP, rate = 1)
|
|
||||||
def patrons_opacity_update(patrons):
|
|
||||||
for patron in patrons:
|
|
||||||
y = patron.get_center()[1]
|
|
||||||
if y > 3.5:
|
|
||||||
patrons.remove(patron)
|
|
||||||
alpha = smooth(np.clip(2.5 - y, 0, 1))
|
|
||||||
patron.set_fill(opacity = alpha)
|
|
||||||
opacity_update = ContinualUpdate(patrons, patrons_opacity_update)
|
|
||||||
|
|
||||||
self.add(scroll, opacity_update)
|
|
||||||
self.wait(55)
|
|
||||||
|
|
||||||
class EndScreen(PatreonEndScreen, PiCreatureScene):
|
class EndScreen(PatreonEndScreen, PiCreatureScene):
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
|
|
|
@ -3844,7 +3844,7 @@ class ThinkBackToHowAmazingThisIs(ThreeDScene):
|
||||||
for n in range(0, self.max_shown_n, 2)
|
for n in range(0, self.max_shown_n, 2)
|
||||||
])
|
])
|
||||||
|
|
||||||
zoom_out = ContinualMovement(
|
zoom_out = always_shift(
|
||||||
self.camera.rotation_mobject,
|
self.camera.rotation_mobject,
|
||||||
direction = OUT, rate = 0.4
|
direction = OUT, rate = 0.4
|
||||||
)
|
)
|
||||||
|
|
|
@ -27,12 +27,12 @@ class Introduction(TeacherStudentsScene):
|
||||||
student.add_updater(
|
student.add_updater(
|
||||||
lambda m: m.move_to(m.center_tracker)
|
lambda m: m.move_to(m.center_tracker)
|
||||||
)
|
)
|
||||||
movement = ContinualMovement(
|
always_shift(
|
||||||
student.center_tracker,
|
student.center_tracker,
|
||||||
direction=DOWN + 3 * LEFT,
|
direction=DOWN + 3 * LEFT,
|
||||||
rate=1.5 * random.random()
|
rate=1.5 * random.random()
|
||||||
)
|
)
|
||||||
movements.append(movement)
|
movements.append(student.center_tracker)
|
||||||
self.add(*movements)
|
self.add(*movements)
|
||||||
self.change_student_modes(
|
self.change_student_modes(
|
||||||
"pondering", "sad", "concerned_musician",
|
"pondering", "sad", "concerned_musician",
|
||||||
|
|
|
@ -1889,7 +1889,8 @@ class DefineDivergenceSymbols(Scene):
|
||||||
output = DecimalNumber(0, include_sign=True)
|
output = DecimalNumber(0, include_sign=True)
|
||||||
output.next_to(tex_mob, RIGHT)
|
output.next_to(tex_mob, RIGHT)
|
||||||
time_tracker = ValueTracker()
|
time_tracker = ValueTracker()
|
||||||
self.add(ContinualMovement(time_tracker, rate=1))
|
always_shift(time_tracker, rate=1)
|
||||||
|
self.add(time_tracker)
|
||||||
output_animation = ContinualChangingDecimal(
|
output_animation = ContinualChangingDecimal(
|
||||||
output, lambda a: 3 * np.cos(int(time_tracker.get_value())),
|
output, lambda a: 3 * np.cos(int(time_tracker.get_value())),
|
||||||
)
|
)
|
||||||
|
|
|
@ -2877,17 +2877,15 @@ class WriteComplexExponentialExpression(DrawFrequencyPlot):
|
||||||
self.wait()
|
self.wait()
|
||||||
|
|
||||||
ghost_dot.move_to(ORIGIN)
|
ghost_dot.move_to(ORIGIN)
|
||||||
ambient_ghost_dot_movement = ContinualMovement(
|
always_shift(ghost_dot, rate = TAU)
|
||||||
ghost_dot, rate = TAU
|
self.add(ghost_dot)
|
||||||
)
|
|
||||||
self.add(ambient_ghost_dot_movement)
|
|
||||||
|
|
||||||
self.play(
|
self.play(
|
||||||
Write(time_label),
|
Write(time_label),
|
||||||
GrowArrow(time_label.arrow),
|
GrowArrow(time_label.arrow),
|
||||||
)
|
)
|
||||||
self.wait(12.5) #Leave time to say let's slow down
|
self.wait(12.5) #Leave time to say let's slow down
|
||||||
self.remove(ambient_ghost_dot_movement)
|
self.remove(ghost_dot)
|
||||||
self.play(
|
self.play(
|
||||||
FadeOut(time_label),
|
FadeOut(time_label),
|
||||||
FadeIn(frequency_label),
|
FadeIn(frequency_label),
|
||||||
|
@ -2899,10 +2897,9 @@ class WriteComplexExponentialExpression(DrawFrequencyPlot):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
ghost_dot.move_to(ORIGIN)
|
ghost_dot.move_to(ORIGIN)
|
||||||
ambient_ghost_dot_movement = ContinualMovement(
|
ghost_dot.clear_updaters()
|
||||||
ghost_dot, rate = 0.1*TAU
|
always_shift(ghost_dot, rate=0.1*TAU)
|
||||||
)
|
self.add(ghost_dot)
|
||||||
self.add(ambient_ghost_dot_movement)
|
|
||||||
self.wait(3)
|
self.wait(3)
|
||||||
self.play(
|
self.play(
|
||||||
FadeOut(frequency_label),
|
FadeOut(frequency_label),
|
||||||
|
@ -2910,7 +2907,8 @@ class WriteComplexExponentialExpression(DrawFrequencyPlot):
|
||||||
)
|
)
|
||||||
self.wait(15) #Give time to reference other video
|
self.wait(15) #Give time to reference other video
|
||||||
#Reverse directions
|
#Reverse directions
|
||||||
ambient_ghost_dot_movement.rate *= -1
|
ghost_dot.clear_updaters()
|
||||||
|
always_shift(ghost_dot, rate=-0.1 * TAU)
|
||||||
self.play(
|
self.play(
|
||||||
FadeOut(example_frequency),
|
FadeOut(example_frequency),
|
||||||
FadeOut(frequency_label.arrow),
|
FadeOut(frequency_label.arrow),
|
||||||
|
@ -2919,7 +2917,7 @@ class WriteComplexExponentialExpression(DrawFrequencyPlot):
|
||||||
)
|
)
|
||||||
self.wait(4)
|
self.wait(4)
|
||||||
|
|
||||||
ambient_ghost_dot_movement.rate = 0
|
ghost_dot.clear_updaters()
|
||||||
self.remove(*updates)
|
self.remove(*updates)
|
||||||
self.play(*list(map(FadeOut, [
|
self.play(*list(map(FadeOut, [
|
||||||
update.mobject
|
update.mobject
|
||||||
|
|
|
@ -48,7 +48,8 @@ class ShowSimpleMultivariableFunction(Scene):
|
||||||
decimal.scale(scale_val)
|
decimal.scale(scale_val)
|
||||||
decimal.next_to(tex, RIGHT)
|
decimal.next_to(tex, RIGHT)
|
||||||
value_tracker = ValueTracker(0)
|
value_tracker = ValueTracker(0)
|
||||||
self.add(ContinualMovement(value_tracker, rate=0.5))
|
always_shift(value_tracker, rate=0.5)
|
||||||
|
self.add(value_tracker)
|
||||||
decimal_change = ContinualChangingDecimal(
|
decimal_change = ContinualChangingDecimal(
|
||||||
decimal,
|
decimal,
|
||||||
lambda a: 1 + np.sin(value_tracker.get_value())
|
lambda a: 1 + np.sin(value_tracker.get_value())
|
||||||
|
|
|
@ -1215,9 +1215,7 @@ class ShowEllipseDefiningProperty(Scene):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
position_tracker_wander = ContinualMovement(
|
always_shift(position_tracker, rate=0.05)
|
||||||
position_tracker, rate=0.05,
|
|
||||||
)
|
|
||||||
|
|
||||||
lines, lines_update_animation = self.get_focal_lines_and_update(
|
lines, lines_update_animation = self.get_focal_lines_and_update(
|
||||||
self.get_foci, dot
|
self.get_foci, dot
|
||||||
|
@ -1233,7 +1231,7 @@ class ShowEllipseDefiningProperty(Scene):
|
||||||
))
|
))
|
||||||
self.play(ShowCreation(lines))
|
self.play(ShowCreation(lines))
|
||||||
self.add(lines_update_animation)
|
self.add(lines_update_animation)
|
||||||
self.add(position_tracker_wander)
|
self.add(position_tracker)
|
||||||
self.wait(2)
|
self.wait(2)
|
||||||
|
|
||||||
self.position_tracker = position_tracker
|
self.position_tracker = position_tracker
|
||||||
|
|
|
@ -531,16 +531,14 @@ class ShowPlan(PiCreatureScene):
|
||||||
rect = BackgroundRectangle(wave, fill_opacity = 1)
|
rect = BackgroundRectangle(wave, fill_opacity = 1)
|
||||||
rect.stretch(2, 1)
|
rect.stretch(2, 1)
|
||||||
rect.next_to(wave, LEFT, buff = 0)
|
rect.next_to(wave, LEFT, buff = 0)
|
||||||
wave_shift = ContinualMovement(
|
always_shift(wave, direction=LEFT, rate=5)
|
||||||
wave, direction = LEFT, rate = 5
|
|
||||||
)
|
|
||||||
wave_fader = UpdateFromAlphaFunc(
|
wave_fader = UpdateFromAlphaFunc(
|
||||||
wave,
|
wave,
|
||||||
lambda w, a : w.set_stroke(width = 3*a)
|
lambda w, a : w.set_stroke(width = 3*a)
|
||||||
)
|
)
|
||||||
checkmark = self.get_checkmark(word)
|
checkmark = self.get_checkmark(word)
|
||||||
|
|
||||||
self.add(wave_shift)
|
self.add(wave)
|
||||||
self.add_foreground_mobjects(rect, word)
|
self.add_foreground_mobjects(rect, word)
|
||||||
self.play(
|
self.play(
|
||||||
Animation(word),
|
Animation(word),
|
||||||
|
@ -567,13 +565,13 @@ class ShowPlan(PiCreatureScene):
|
||||||
target = Plane()
|
target = Plane()
|
||||||
# target.match_height(radar_dish)
|
# target.match_height(radar_dish)
|
||||||
target.next_to(radar_dish, RIGHT, buff = LARGE_BUFF)
|
target.next_to(radar_dish, RIGHT, buff = LARGE_BUFF)
|
||||||
target_movement = ContinualMovement(target, direction = RIGHT, rate = 1.25)
|
always_shift(target, direction = RIGHT, rate = 1.25)
|
||||||
|
|
||||||
pulse = RadarPulse(radar_dish, target)
|
pulse = RadarPulse(radar_dish, target)
|
||||||
|
|
||||||
checkmark = self.get_checkmark(word)
|
checkmark = self.get_checkmark(word)
|
||||||
|
|
||||||
self.add(target_movement)
|
self.add(target)
|
||||||
self.play(
|
self.play(
|
||||||
Write(word),
|
Write(word),
|
||||||
DrawBorderThenFill(radar_dish),
|
DrawBorderThenFill(radar_dish),
|
||||||
|
@ -1653,11 +1651,7 @@ class MentionDopplerRadar(TeacherStudentsScene):
|
||||||
plane = Plane()
|
plane = Plane()
|
||||||
plane.to_edge(RIGHT)
|
plane.to_edge(RIGHT)
|
||||||
plane.align_to(dish)
|
plane.align_to(dish)
|
||||||
plane_flight = ContinualMovement(
|
always_shift(plane, LEFT, 1)
|
||||||
plane,
|
|
||||||
direction = LEFT,
|
|
||||||
rate = 1,
|
|
||||||
)
|
|
||||||
plane.flip()
|
plane.flip()
|
||||||
pulse = RadarPulse(dish, plane)
|
pulse = RadarPulse(dish, plane)
|
||||||
look_at_anims = [
|
look_at_anims = [
|
||||||
|
@ -1667,7 +1661,7 @@ class MentionDopplerRadar(TeacherStudentsScene):
|
||||||
for pi in self.get_pi_creatures()
|
for pi in self.get_pi_creatures()
|
||||||
]
|
]
|
||||||
|
|
||||||
self.add(dish, plane_flight, pulse, *look_at_anims)
|
self.add(dish, plane, pulse, *look_at_anims)
|
||||||
self.play(
|
self.play(
|
||||||
self.teacher.change, "hooray",
|
self.teacher.change, "hooray",
|
||||||
words.restore
|
words.restore
|
||||||
|
@ -1834,11 +1828,9 @@ class IntroduceDopplerRadar(Scene):
|
||||||
ShowCreation(sum_graph, run_time = 8, rate_func=linear)
|
ShowCreation(sum_graph, run_time = 8, rate_func=linear)
|
||||||
)
|
)
|
||||||
pulse = RadarPulse(dish, plane, n_pulse_singletons = 12)
|
pulse = RadarPulse(dish, plane, n_pulse_singletons = 12)
|
||||||
plane_flight = ContinualMovement(
|
always_shift(plane, LEFT, 1.5)
|
||||||
plane, direction = LEFT, rate = 1.5
|
|
||||||
)
|
|
||||||
|
|
||||||
self.add(graph_draw, pulse, plane_flight)
|
self.add(graph_draw, pulse, plane)
|
||||||
self.play(UpdateFromAlphaFunc(
|
self.play(UpdateFromAlphaFunc(
|
||||||
plane, lambda m, a : m.set_fill(opacity = a)
|
plane, lambda m, a : m.set_fill(opacity = a)
|
||||||
))
|
))
|
||||||
|
@ -1859,7 +1851,7 @@ class IntroduceDopplerRadar(Scene):
|
||||||
self.wait(0.1)
|
self.wait(0.1)
|
||||||
self.play(Write(echo_subtext, run_time = 1))
|
self.play(Write(echo_subtext, run_time = 1))
|
||||||
self.wait()
|
self.wait()
|
||||||
self.remove(graph_draw, pulse, plane_flight)
|
self.remove(graph_draw, pulse, plane)
|
||||||
|
|
||||||
pulse_graph.set_stroke(width = 0)
|
pulse_graph.set_stroke(width = 0)
|
||||||
echo_graph.set_stroke(width = 0)
|
echo_graph.set_stroke(width = 0)
|
||||||
|
@ -2613,7 +2605,7 @@ class AmbiguityInLongEchos(IntroduceDopplerRadar, PiCreatureScene):
|
||||||
object_velocities = self.object_velocities
|
object_velocities = self.object_velocities
|
||||||
|
|
||||||
movements = self.object_movements = [
|
movements = self.object_movements = [
|
||||||
ContinualMovement(
|
always_shift(
|
||||||
obj,
|
obj,
|
||||||
direction = v/get_norm(v),
|
direction = v/get_norm(v),
|
||||||
rate = get_norm(v)
|
rate = get_norm(v)
|
||||||
|
@ -3289,7 +3281,7 @@ class SortOfDopplerEffect(PiCreatureScene):
|
||||||
t_tracker = VectorizedPoint()
|
t_tracker = VectorizedPoint()
|
||||||
#x-coordinate gives wave number
|
#x-coordinate gives wave number
|
||||||
k_tracker = VectorizedPoint(2*RIGHT)
|
k_tracker = VectorizedPoint(2*RIGHT)
|
||||||
tk_movement = ContinualMovement(t_tracker, direction = RIGHT, rate = 1)
|
always_shift(t_tracker, RIGHT, 1)
|
||||||
def get_wave():
|
def get_wave():
|
||||||
t = t_tracker.get_center()[0]
|
t = t_tracker.get_center()[0]
|
||||||
k = k_tracker.get_center()[0]
|
k = k_tracker.get_center()[0]
|
||||||
|
@ -3322,7 +3314,8 @@ class SortOfDopplerEffect(PiCreatureScene):
|
||||||
|
|
||||||
rect = ScreenRectangle(height = 2)
|
rect = ScreenRectangle(height = 2)
|
||||||
rect.to_edge(RIGHT)
|
rect.to_edge(RIGHT)
|
||||||
rect_movement = ContinualMovement(rect, direction = LEFT, rate = 1)
|
always_shift(rect, LEFT, 1)
|
||||||
|
rect_movement = rect
|
||||||
|
|
||||||
randy = self.pi_creature
|
randy = self.pi_creature
|
||||||
randy_look_at = ContinualUpdate(
|
randy_look_at = ContinualUpdate(
|
||||||
|
@ -3341,7 +3334,7 @@ class SortOfDopplerEffect(PiCreatureScene):
|
||||||
ref_frame_1_continual_anim = ContinualAnimation(ref_frame1)
|
ref_frame_1_continual_anim = ContinualAnimation(ref_frame1)
|
||||||
|
|
||||||
self.add(
|
self.add(
|
||||||
tk_movement, wave_update, rect_movement, randy_look_at,
|
t_tracker, wave_update, rect_movement, randy_look_at,
|
||||||
ref_frame2_follow, ref_frame_1_continual_anim
|
ref_frame2_follow, ref_frame_1_continual_anim
|
||||||
)
|
)
|
||||||
self.add(ref_frame1)
|
self.add(ref_frame1)
|
||||||
|
@ -3446,7 +3439,8 @@ class HangingWeightsScene(MovingCameraScene):
|
||||||
|
|
||||||
k_tracker = self.k_tracker = VectorizedPoint()
|
k_tracker = self.k_tracker = VectorizedPoint()
|
||||||
t_tracker = self.t_tracker = VectorizedPoint()
|
t_tracker = self.t_tracker = VectorizedPoint()
|
||||||
self.t_tracker_walk = ContinualMovement(t_tracker, direction = RIGHT, rate = 1)
|
always_shift(t_tracker, RIGHT, 1)
|
||||||
|
self.t_tracker_walk = t_tracker
|
||||||
equilibrium_height = springs.get_height()
|
equilibrium_height = springs.get_height()
|
||||||
def update_springs(springs):
|
def update_springs(springs):
|
||||||
for spring in springs:
|
for spring in springs:
|
||||||
|
@ -3560,7 +3554,7 @@ class HangingWeightsScene(MovingCameraScene):
|
||||||
|
|
||||||
def moving_reference_frame(self):
|
def moving_reference_frame(self):
|
||||||
rect = ScreenRectangle(height = 2.1*FRAME_Y_RADIUS)
|
rect = ScreenRectangle(height = 2.1*FRAME_Y_RADIUS)
|
||||||
rect_movement = ContinualMovement(rect, direction = LEFT, rate = 2)
|
rect_movement = always_shift(rect, direction = LEFT, rate = 2)
|
||||||
camera_frame = self.camera_frame
|
camera_frame = self.camera_frame
|
||||||
|
|
||||||
self.add(rect)
|
self.add(rect)
|
||||||
|
@ -4294,7 +4288,7 @@ class ThinkOfHeisenbergUncertainty(PiCreatureScene):
|
||||||
self.add()
|
self.add()
|
||||||
freq = 1
|
freq = 1
|
||||||
continual_anims = [
|
continual_anims = [
|
||||||
ContinualMovement(time_tracker, direction = RIGHT, rate = 1),
|
always_shift(time_tracker, direction = RIGHT, rate = 1),
|
||||||
ContinualUpdate(
|
ContinualUpdate(
|
||||||
dot_gdw,
|
dot_gdw,
|
||||||
lambda d : d.set_width(
|
lambda d : d.set_width(
|
||||||
|
|
Loading…
Add table
Reference in a new issue