mirror of
https://github.com/3b1b/manim.git
synced 2025-09-01 00:48:45 +00:00
movement of indicators in BackToEulerSumScene
This commit is contained in:
parent
968b0dd811
commit
4a11d8f42d
1 changed files with 60 additions and 105 deletions
|
@ -971,7 +971,6 @@ class ScreenShapingScene(ThreeDScene):
|
|||
dimmed_ambient_light = self.ambient_light.copy()
|
||||
dimmed_ambient_light.dimming(AMBIENT_DIMMED)
|
||||
#self.light_source.set_max_opacity_spotlight(0.001)
|
||||
print self.light_source.shadow.get_center()
|
||||
self.play(
|
||||
self.light_source.set_max_opacity_spotlight,1.0, # this hides Morty for a moment, why?
|
||||
Transform(self.ambient_light,dimmed_ambient_light),
|
||||
|
@ -1179,9 +1178,6 @@ class ScreenShapingScene(ThreeDScene):
|
|||
dphi = phi1 - phi0
|
||||
dtheta = theta1 - theta0
|
||||
|
||||
print "moving camera from (", phi0/DEGREES, ", ", theta0/DEGREES, ") to (", phi1/DEGREES, ", ", theta1/DEGREES, ")"
|
||||
|
||||
|
||||
camera_target_point = target_point # self.camera.get_spherical_coords(45 * DEGREES, -60 * DEGREES)
|
||||
projection_direction = self.camera.spherical_coords_to_point(phi1,theta1, 1)
|
||||
|
||||
|
@ -1298,7 +1294,7 @@ class BackToEulerSumScene(PiCreatureScene):
|
|||
# create an indicator that will move along the number line
|
||||
indicator = LightIndicator(color = LIGHT_COLOR,
|
||||
radius = INDICATOR_RADIUS,
|
||||
opacity_for_unit_intensity = 0.2, #OPACITY_FOR_UNIT_INTENSITY,
|
||||
opacity_for_unit_intensity = OPACITY_FOR_UNIT_INTENSITY,
|
||||
show_reading = False
|
||||
)
|
||||
indicator_reading = euler_sum[0]
|
||||
|
@ -1306,14 +1302,20 @@ class BackToEulerSumScene(PiCreatureScene):
|
|||
indicator_reading.move_to(indicator.get_center())
|
||||
indicator.add(indicator_reading)
|
||||
indicator.tex_reading = indicator_reading
|
||||
# the TeX reading is too bright at full intensity
|
||||
indicator.tex_reading.set_fill(color = BLACK)
|
||||
indicator.foreground.set_fill(None,opacities[0])
|
||||
|
||||
|
||||
indicator.move_to(point)
|
||||
indicator.set_intensity(intensities[0])
|
||||
|
||||
|
||||
self.add_foreground_mobject(indicator)
|
||||
|
||||
collection_point = np.array([-5,2,0])
|
||||
collection_point = np.array([-6.,2.,0.])
|
||||
left_shift = 0.2*LEFT
|
||||
collected_indicators = Mobject()
|
||||
|
||||
|
||||
for i in range(2, NUM_VISIBLE_CONES + 1):
|
||||
|
@ -1328,6 +1330,7 @@ class BackToEulerSumScene(PiCreatureScene):
|
|||
indicator_target = indicator.deepcopy()
|
||||
indicator_target.shift(v)
|
||||
|
||||
|
||||
# Here we make a copy that will move into the thought bubble.
|
||||
bubble_indicator = indicator.deepcopy()
|
||||
# And its target
|
||||
|
@ -1337,127 +1340,79 @@ class BackToEulerSumScene(PiCreatureScene):
|
|||
# give the target the appropriate reading
|
||||
euler_sum[2*i-4].move_to(bubble_indicator_target)
|
||||
bubble_indicator_target.remove(bubble_indicator_target.tex_reading)
|
||||
bubble_indicator_target.tex_reading = euler_sum[2*i-4]
|
||||
bubble_indicator_target.tex_reading = euler_sum[2*i-4].copy()
|
||||
bubble_indicator_target.add(bubble_indicator_target.tex_reading)
|
||||
# center it in the indicator
|
||||
|
||||
bubble_indicator_target.reading.scale_to_fit_height(0.8*indicator.get_height())
|
||||
|
||||
if bubble_indicator_target.tex_reading.get_tex_string() != "1":
|
||||
bubble_indicator_target.tex_reading.scale_to_fit_height(0.8*indicator.get_height())
|
||||
# the target is less bright, possibly switch to a white text color
|
||||
if bubble_indicator_target.intensity < 0.7:
|
||||
bubble_indicator.tex_reading.set_fill(color = WHITE)
|
||||
|
||||
# position the target in the thought bubble
|
||||
collection_point
|
||||
bubble_indicator_target.move_to(collection_point)
|
||||
|
||||
|
||||
self.add_foreground_mobject(bubble_indicator)
|
||||
|
||||
self.play(
|
||||
Transform(bubble_indicator,bubble_indicator_target)
|
||||
)
|
||||
|
||||
self.wait()
|
||||
|
||||
self.play(
|
||||
Transform(indicator,indicator_target),
|
||||
Transform(bubble_indicator,bubble_indicator_target),
|
||||
collected_indicators.shift,left_shift,
|
||||
)
|
||||
|
||||
collected_indicators.add(bubble_indicator)
|
||||
|
||||
new_light = light_source.deepcopy()
|
||||
w = new_light.get_source_point()
|
||||
print "old:", w
|
||||
print "moving source to:", w + (i-1)*v
|
||||
new_light.move_source_to(w + (i-1)*v)
|
||||
new_light.move_source_to(w + (i-2)*v)
|
||||
w2 = new_light.get_source_point()
|
||||
print "new:", w2
|
||||
self.play(SwitchOn(new_light.ambient_light))
|
||||
|
||||
self.add(new_light.lighthouse)
|
||||
self.play(
|
||||
Transform(indicator,indicator_target),
|
||||
new_light.shift,v,
|
||||
)
|
||||
|
||||
self.play(SwitchOn(new_light.ambient_light),
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
# quickly switch on off-screen light cones
|
||||
for i in range(NUM_VISIBLE_CONES,NUM_CONES):
|
||||
indicator_start_time = 0.5 * (i+1) * FAST_SWITCH_ON_RUN_TIME/light_source.ambient_light.radius * self.number_line.unit_size
|
||||
indicator_stop_time = indicator_start_time + FAST_INDICATOR_UPDATE_TIME
|
||||
indicator_rate_func = squish_rate_func(#smooth, 0.8, 0.9)
|
||||
smooth,indicator_start_time,indicator_stop_time)
|
||||
ls = LightSource()
|
||||
point = point = self.number_line.number_to_point(i)
|
||||
ls.move_source_to(point)
|
||||
self.play(
|
||||
SwitchOn(ls.ambient_light, run_time = FAST_SWITCH_ON_RUN_TIME),
|
||||
)
|
||||
|
||||
# switch on lights off-screen
|
||||
# while writing an ellipsis in the series
|
||||
# and fading out the stack of indicators
|
||||
# and fading in pi^2/6 instead
|
||||
# move a copy of pi^2/6 down to the series
|
||||
# ans fade in an equals sign
|
||||
# and morph indicator stack into limit value
|
||||
|
||||
sum_indicator = LightIndicator(color = LIGHT_COLOR,
|
||||
radius = INDICATOR_RADIUS,
|
||||
opacity_for_unit_intensity = OPACITY_FOR_UNIT_INTENSITY,
|
||||
show_reading = False
|
||||
)
|
||||
sum_indicator.set_intensity(intensities[0] * np.pi**2/6)
|
||||
sum_indicator_reading = TexMobject("{\pi^2 \over 6}")
|
||||
sum_indicator_reading.scale_to_fit_height(0.8 * sum_indicator.get_height())
|
||||
sum_indicator.add(sum_indicator_reading)
|
||||
sum_indicator.move_to(collection_point)
|
||||
|
||||
|
||||
|
||||
|
||||
# for i in range(1,NUM_VISIBLE_CONES+1):
|
||||
|
||||
# # create light indicators
|
||||
# # but they contain fractions!
|
||||
# indicator = LightIndicator(color = LIGHT_COLOR,
|
||||
# radius = INDICATOR_RADIUS,
|
||||
# opacity_for_unit_intensity = OPACITY_FOR_UNIT_INTENSITY,
|
||||
# show_reading = False
|
||||
# )
|
||||
# indicator.set_intensity(intensities[i-1])
|
||||
# indicator_reading = euler_sum[-2+2*i]
|
||||
# indicator_reading.scale_to_fit_height(0.8*indicator.get_height())
|
||||
# indicator_reading.move_to(indicator.get_center())
|
||||
# indicator.add(indicator_reading)
|
||||
# indicator.foreground.set_fill(None,opacities[i-1])
|
||||
|
||||
|
||||
# if i == 1:
|
||||
# indicator.next_to(randy,DOWN,buff = 5)
|
||||
# indicator_reading.scale_to_fit_height(0.4*indicator.get_height())
|
||||
# # otherwise we get a huge 1
|
||||
# else:
|
||||
# indicator.next_to(light_indicators[i-2],DOWN, buff = 0.2)
|
||||
|
||||
# light_indicators.append(indicator)
|
||||
# indicators_as_mob.add(indicator)
|
||||
|
||||
|
||||
# bubble.add_content(indicators_as_mob)
|
||||
# indicators_as_mob.shift(DOWN+0.5*LEFT)
|
||||
|
||||
|
||||
# for lh in lighthouses:
|
||||
# self.add_foreground_mobject(lh)
|
||||
|
||||
|
||||
# # slowly switch on visible light cones and increment indicator
|
||||
# for (i,ambient_light) in zip(range(NUM_VISIBLE_CONES),ambient_lights[:NUM_VISIBLE_CONES]):
|
||||
# indicator_start_time = 0.4 * (i+1) * SWITCH_ON_RUN_TIME/ambient_light.radius * self.number_line.unit_size
|
||||
# indicator_stop_time = indicator_start_time + INDICATOR_UPDATE_TIME
|
||||
# indicator_rate_func = squish_rate_func(
|
||||
# smooth,indicator_start_time,indicator_stop_time)
|
||||
# self.play(
|
||||
# SwitchOn(ambient_light),
|
||||
# FadeIn(light_indicators[i])
|
||||
# )
|
||||
|
||||
# # quickly switch on off-screen light cones and increment indicator
|
||||
# for (i,ambient_light) in zip(range(NUM_VISIBLE_CONES,NUM_CONES),ambient_lights[NUM_VISIBLE_CONES:NUM_CONES]):
|
||||
# indicator_start_time = 0.5 * (i+1) * FAST_SWITCH_ON_RUN_TIME/ambient_light.radius * self.number_line.unit_size
|
||||
# indicator_stop_time = indicator_start_time + FAST_INDICATOR_UPDATE_TIME
|
||||
# indicator_rate_func = squish_rate_func(#smooth, 0.8, 0.9)
|
||||
# smooth,indicator_start_time,indicator_stop_time)
|
||||
# self.play(
|
||||
# SwitchOn(ambient_light, run_time = FAST_SWITCH_ON_RUN_TIME),
|
||||
# )
|
||||
|
||||
|
||||
# # show limit value in light indicator and an equals sign
|
||||
# sum_indicator = LightIndicator(color = LIGHT_COLOR,
|
||||
# radius = INDICATOR_RADIUS,
|
||||
# opacity_for_unit_intensity = OPACITY_FOR_UNIT_INTENSITY,
|
||||
# show_reading = False
|
||||
# )
|
||||
# sum_indicator.set_intensity(intensities[0] * np.pi**2/6)
|
||||
# sum_indicator_reading = TexMobject("{\pi^2 \over 6}")
|
||||
# sum_indicator_reading.scale_to_fit_height(0.8 * sum_indicator.get_height())
|
||||
# sum_indicator.add(sum_indicator_reading)
|
||||
|
||||
# brace = Brace(indicators_as_mob, direction = RIGHT, buff = 0.5)
|
||||
# brace.shift(2*RIGHT)
|
||||
# sum_indicator.next_to(brace,RIGHT)
|
||||
|
||||
|
||||
# self.play(
|
||||
# ShowCreation(brace),
|
||||
# ShowCreation(sum_indicator), # DrawBorderThenFill
|
||||
# )
|
||||
self.play(
|
||||
Transform(collected_indicators,sum_indicator)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue