Merge pull request #150 from 3b1b/WindingNumber

Winding number
This commit is contained in:
Grant Sanderson
2018-03-06 13:46:15 -08:00
committed by GitHub
6 changed files with 624 additions and 212 deletions

File diff suppressed because it is too large Load Diff

View File

@ -168,9 +168,6 @@ class FadeOut(Transform):
def __init__(self, mobject, **kwargs): def __init__(self, mobject, **kwargs):
target = mobject.copy() target = mobject.copy()
target.fade(1) target.fade(1)
if isinstance(mobject, VMobject):
target.set_stroke(width = 0)
target.set_fill(opacity = 0)
Transform.__init__(self, mobject, target, **kwargs) Transform.__init__(self, mobject, target, **kwargs)
def clean_up(self, surrounding_scene = None): def clean_up(self, surrounding_scene = None):

View File

@ -359,6 +359,11 @@ def mid(start, end):
def inverse_interpolate(start, end, value): def inverse_interpolate(start, end, value):
return np.true_divide(value - start, end - start) return np.true_divide(value - start, end - start)
def match_interpolate(new_start, new_end, old_start, old_end, old_value):
return interpolate(
new_start, new_end,
inverse_interpolate(old_start, old_end, old_value))
def clamp(lower, upper, val): def clamp(lower, upper, val):
if val < lower: if val < lower:
return lower return lower

View File

@ -527,16 +527,34 @@ class Mobject(Container):
self.highlight(self.color) self.highlight(self.color)
return self return self
def fade_to(self, color, alpha): # Some objects (e.g., VMobjects) have special fading
for mob in self.family_members_with_points(): # behavior. We let every object handle its individual
start = color_to_rgb(mob.get_color()) # fading via fade_no_recurse (notionally a purely internal method),
# and then have fade() itself call this recursively on each submobject
#
# Similarly for fade_to_no_recurse and fade_to, the underlying functions
# used by default for fade()ing
def fade_to_no_recurse(self, color, alpha):
if self.get_num_points() > 0:
start = color_to_rgb(self.get_color())
end = color_to_rgb(color) end = color_to_rgb(color)
new_rgb = interpolate(start, end, alpha) new_rgb = interpolate(start, end, alpha)
mob.highlight(Color(rgb = new_rgb), family = False) self.highlight(Color(rgb = new_rgb), family = False)
return self
def fade_to(self, color, alpha):
for mob in self.subobject_family():
mob.fade_to_no_recurse(self, color, alpha)
return self
def fade_no_recurse(self, darkness):
self.fade_to_no_recurse(BLACK, darkness)
return self return self
def fade(self, darkness = 0.5): def fade(self, darkness = 0.5):
self.fade_to(BLACK, darkness) for submob in self.submobject_family():
submob.fade_no_recurse(darkness)
return self return self
def get_color(self): def get_color(self):

View File

@ -113,16 +113,15 @@ class VMobject(Mobject):
sm1.match_style(sm2) sm1.match_style(sm2)
return self return self
def fade(self, darkness = 0.5): def fade_no_recurse(self, darkness):
for submob in self.submobject_family(): self.set_stroke(
submob.set_stroke( width = (1-darkness)*self.get_stroke_width(),
width = (1-darkness)*submob.get_stroke_width(), family = False
family = False )
) self.set_fill(
submob.set_fill( opacity = (1-darkness)*self.get_fill_opacity(),
opacity = (1-darkness)*submob.get_fill_opacity(), family = False
family = False )
)
return self return self
def get_fill_rgb(self): def get_fill_rgb(self):

View File

@ -170,7 +170,6 @@ class ComplexPlane(NumberPlane):
"unit_size" : 1, "unit_size" : 1,
"line_frequency" : 1, "line_frequency" : 1,
"faded_line_frequency" : 0.5, "faded_line_frequency" : 0.5,
"number_scale_factor" : 0.5,
} }
def __init__(self, **kwargs): def __init__(self, **kwargs):
digest_config(self, kwargs) digest_config(self, kwargs)
@ -204,6 +203,8 @@ class ComplexPlane(NumberPlane):
for y in range(-int(self.y_radius), int(self.y_radius)+1) for y in range(-int(self.y_radius), int(self.y_radius)+1)
] ]
for number in numbers: for number in numbers:
if number == complex(0, 0):
continue
point = self.number_to_point(number) point = self.number_to_point(number)
num_str = str(number).replace("j", "i") num_str = str(number).replace("j", "i")
if num_str.startswith("0"): if num_str.startswith("0"):
@ -212,9 +213,8 @@ class ComplexPlane(NumberPlane):
num_str = num_str.replace("1", "") num_str = num_str.replace("1", "")
num_mob = TexMobject(num_str) num_mob = TexMobject(num_str)
num_mob.add_background_rectangle() num_mob.add_background_rectangle()
num_mob.scale(self.number_scale_factor) num_mob.scale_to_fit_height(self.written_coordinate_height)
vect = DOWN + LEFT num_mob.next_to(point, DOWN+LEFT, SMALL_BUFF)
num_mob.next_to(point, vect, SMALL_BUFF)
result.add(num_mob) result.add(num_mob)
return result return result