mirror of
https://github.com/3b1b/manim.git
synced 2025-09-01 00:48:45 +00:00
Scenes 2-5 mostly finished
This commit is contained in:
parent
7ca95b4195
commit
5169d6b297
1 changed files with 54 additions and 25 deletions
|
@ -241,9 +241,9 @@ class Spotlight(VMobject):
|
|||
ray1 = self.screen.points[0] - use_point
|
||||
ray2 = self.screen.points[-1] - use_point
|
||||
ray1 = ray1/np.linalg.norm(ray1) * 100
|
||||
ray1 = rotate_vector(ray1,-TAU/16)
|
||||
ray1 = rotate_vector(ray1,-TAU/100)
|
||||
ray2 = ray2/np.linalg.norm(ray2) * 100
|
||||
ray2 = rotate_vector(ray2,TAU/16)
|
||||
ray2 = rotate_vector(ray2,TAU/100)
|
||||
outpoint1 = self.screen.points[0] + ray1
|
||||
outpoint2 = self.screen.points[-1] + ray2
|
||||
self.shadow.add_control_points([outpoint2,outpoint1,self.screen.points[0]])
|
||||
|
@ -336,7 +336,8 @@ class LightIndicator(Mobject):
|
|||
CONFIG = {
|
||||
"radius": 0.5,
|
||||
"intensity": 0,
|
||||
"opacity_for_unit_intensity": 1
|
||||
"opacity_for_unit_intensity": 1,
|
||||
"precision": 3
|
||||
}
|
||||
|
||||
def generate_points(self):
|
||||
|
@ -346,7 +347,7 @@ class LightIndicator(Mobject):
|
|||
self.foreground.set_stroke(color=INDICATOR_STROKE_COLOR,width=INDICATOR_STROKE_WIDTH)
|
||||
|
||||
self.add(self.background, self.foreground)
|
||||
self.reading = DecimalNumber(self.intensity,num_decimal_points = 3)
|
||||
self.reading = DecimalNumber(self.intensity,num_decimal_points = self.precision)
|
||||
self.reading.set_fill(color=INDICATOR_TEXT_COLOR)
|
||||
self.reading.move_to(self.get_center())
|
||||
self.add(self.reading)
|
||||
|
@ -873,7 +874,7 @@ class SingleLightHouseScene(PiCreatureScene):
|
|||
#self.wait()
|
||||
|
||||
|
||||
### The following is supposed to morph the scene into the Earth scene,
|
||||
### The following is supposed to morph the scene into the Earth scene,
|
||||
### but it doesn't work
|
||||
|
||||
|
||||
|
@ -1045,7 +1046,7 @@ class ScreenShapingScene(Scene):
|
|||
|
||||
self.wait()
|
||||
|
||||
# Scene 5: constant screen size, changing opening angle
|
||||
|
||||
|
||||
screen = slanted_screen
|
||||
source.screen = screen
|
||||
|
@ -1062,27 +1063,57 @@ class ScreenShapingScene(Scene):
|
|||
|
||||
self.remove(original_brightness_rect)
|
||||
|
||||
shifted_brightness_rect = brightness_rect.copy()
|
||||
shifted_brightness_rect.shift([-3,0,0]).set_fill(opacity = 0.8)
|
||||
|
||||
# Scene 5: constant screen size, changing opening angle
|
||||
|
||||
# let's use an actual light indicator instead of just rects
|
||||
|
||||
indicator_intensity = 0.25
|
||||
indicator_height = 1.25 * screen_height
|
||||
|
||||
# indicator_origin = Ellipse(width = 0, height = screen_height).move_to(screen.get_center())
|
||||
# indicator_origin.set_fill(opacity = 0)
|
||||
# self.add_foreground_mobject(indicator_origin)
|
||||
|
||||
indicator = LightIndicator(radius = indicator_height/2,
|
||||
opacity_for_unit_intensity = OPACITY_FOR_UNIT_INTENSITY,
|
||||
color = LIGHT_COLOR,
|
||||
precision = 2)
|
||||
indicator.set_intensity(indicator_intensity)
|
||||
|
||||
indicator.move_to(slanted_brightness_rect.get_center())
|
||||
|
||||
|
||||
self.play(
|
||||
ApplyMethod(screen.shift,[-3,0,0]),
|
||||
ApplyMethod(morty.shift,[-3,0,0]),
|
||||
#ApplyMethod(brightness_rect.shift,[-3,0,0]),
|
||||
#ApplyMethod(brightness_rect.set_fill,{"opacity": 0.8})
|
||||
ReplacementTransform(brightness_rect,shifted_brightness_rect)
|
||||
FadeOut(slanted_brightness_rect),
|
||||
FadeIn(indicator)
|
||||
)
|
||||
|
||||
self.add_foreground_mobject(indicator.reading)
|
||||
|
||||
new_indicator_intensity = 1.0
|
||||
|
||||
# shifted_brightness_rect = brightness_rect.copy()
|
||||
# shifted_brightness_rect.shift([-3,0,0]).set_fill(opacity = 0.8)
|
||||
|
||||
left_shift = (screen.get_center()[0] - source.source_point[0])/2
|
||||
|
||||
self.play(
|
||||
ApplyMethod(screen.shift,[-left_shift,0,0]),
|
||||
ApplyMethod(morty.shift,[-left_shift,0,0]),
|
||||
ApplyMethod(indicator.shift,[-left_shift,0,0]),
|
||||
ApplyMethod(indicator.set_intensity,new_indicator_intensity),
|
||||
)
|
||||
|
||||
self.remove(original_screen) # was still hiding behind the shadow
|
||||
self.remove(shifted_brightness_rect) # also one too many
|
||||
|
||||
|
||||
# add distance indicator
|
||||
|
||||
left_x = source.source_point[0]
|
||||
right_x = screen.get_center()[0]
|
||||
indicator_y = -2
|
||||
line1 = Arrow([left_x,indicator_y,0],[right_x,indicator_y,0])
|
||||
line2 = Arrow([right_x,indicator_y,0],[left_x,indicator_y,0])
|
||||
line_y = -2
|
||||
line1 = Arrow([left_x,line_y,0],[right_x,line_y,0])
|
||||
line2 = Arrow([right_x,line_y,0],[left_x,line_y,0])
|
||||
line1.set_fill(color = WHITE)
|
||||
line2.set_fill(color = WHITE)
|
||||
distance_decimal = Integer(1).next_to(line1,DOWN)
|
||||
|
@ -1093,21 +1124,19 @@ class ScreenShapingScene(Scene):
|
|||
# move everything away
|
||||
distance_to_source = right_x - left_x
|
||||
new_right_x = left_x + 2*distance_to_source
|
||||
new_line1 = Arrow([left_x,indicator_y,0],[new_right_x,indicator_y,0])
|
||||
new_line2 = Arrow([new_right_x,indicator_y,0],[left_x,indicator_y,0])
|
||||
new_line1 = Arrow([left_x,line_y,0],[new_right_x,line_y,0])
|
||||
new_line2 = Arrow([new_right_x,line_y,0],[left_x,line_y,0])
|
||||
new_line1.set_fill(color = WHITE)
|
||||
new_line2.set_fill(color = WHITE)
|
||||
new_distance_decimal = Integer(2).next_to(new_line1,DOWN)
|
||||
new_line = VGroup(new_line1, new_line2,new_distance_decimal)
|
||||
new_line = VGroup(new_line1, new_line2, new_distance_decimal)
|
||||
|
||||
new_brightness_rect = brightness_rect.copy()
|
||||
new_brightness_rect.shift([distance_to_source,0,0])
|
||||
new_brightness_rect.set_fill(opacity = 0.2)
|
||||
|
||||
self.play(
|
||||
ReplacementTransform(line,new_line),
|
||||
ApplyMethod(screen.shift,[distance_to_source,0,0]),
|
||||
Transform(brightness_rect,new_brightness_rect),
|
||||
ApplyMethod(indicator.shift,[left_shift,0,0]),
|
||||
ApplyMethod(indicator.set_intensity,indicator_intensity),
|
||||
ApplyMethod(morty.shift,[distance_to_source,0,0]),
|
||||
)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue