mirror of
https://github.com/3b1b/manim.git
synced 2025-09-01 00:48:45 +00:00
More chapter 5, plus some renaming fun
This commit is contained in:
parent
6fe057c0f9
commit
4f42f62b3c
19 changed files with 162 additions and 102 deletions
|
@ -893,7 +893,7 @@ class VectorAdditionNumerically(VectorScene):
|
|||
var.highlight(X_COLOR)
|
||||
else:
|
||||
var.highlight(Y_COLOR)
|
||||
var.scale(VECTOR_LABEL_SCALE_VAL)
|
||||
var.scale(VECTOR_LABEL_SCALE_FACTOR)
|
||||
var.move_to(starter)
|
||||
self.play(
|
||||
Transform(
|
||||
|
@ -1050,7 +1050,7 @@ class ScalingNumerically(VectorScene):
|
|||
VMobject(x_sym, two_x_sym).highlight(X_COLOR)
|
||||
VMobject(y_sym, two_y_sym).highlight(Y_COLOR)
|
||||
syms = [x_sym, y_sym, two_x_sym, two_y_sym]
|
||||
VMobject(*syms).scale(VECTOR_LABEL_SCALE_VAL)
|
||||
VMobject(*syms).scale(VECTOR_LABEL_SCALE_FACTOR)
|
||||
for sym, num in zip(syms, [x, y] + list(two_v_elems)):
|
||||
sym.move_to(num)
|
||||
self.play(
|
||||
|
|
|
@ -134,13 +134,13 @@ class CoordinatesAsScalars(VectorScene):
|
|||
i_hat_label = self.label_vector(
|
||||
i_hat, "\\hat{\\imath}",
|
||||
color = X_COLOR,
|
||||
label_scale_val = 1
|
||||
label_scale_factor = 1
|
||||
)
|
||||
self.add_vector(j_hat)
|
||||
j_hat_label = self.label_vector(
|
||||
j_hat, "\\hat{\\jmath}",
|
||||
color = Y_COLOR,
|
||||
label_scale_val = 1
|
||||
label_scale_factor = 1
|
||||
)
|
||||
self.dither()
|
||||
|
||||
|
@ -287,7 +287,7 @@ class ShowVaryingLinearCombinations(VectorScene):
|
|||
"direction" : LEFT,
|
||||
"buff" : 0.1
|
||||
},
|
||||
scale_val = 0.75,
|
||||
scale_factor = 0.75,
|
||||
value_function = get_val_func(v)
|
||||
)
|
||||
for v, label in (v1, v1_label), (v2, v2_label)
|
||||
|
@ -414,11 +414,11 @@ class ShowVaryingLinearCombinations(VectorScene):
|
|||
sum_anims = self.get_sum_animations(v1, v2)
|
||||
aux_anims = list(sum_anims) + label_anims + scalar_anims
|
||||
|
||||
scale_val = 2
|
||||
scale_factor = 2
|
||||
for w1, w2 in (v2, v1), (v1, v2):
|
||||
w1_vect = w1.get_end()-w1.get_start()
|
||||
w2_vect = w2.get_end()-w2.get_start()
|
||||
for num in scale_val, -1, -1./scale_val:
|
||||
for num in scale_factor, -1, -1./scale_factor:
|
||||
curr_tip = self.sum_vector.get_end()
|
||||
line = Line(ORIGIN, curr_tip)
|
||||
self.play(
|
||||
|
|
|
@ -588,13 +588,13 @@ class FollowIHatJHat(LinearTransformationScene):
|
|||
i_label = self.label_vector(
|
||||
i_hat, "\\hat{\\imath}",
|
||||
color = X_COLOR,
|
||||
label_scale_val = 1
|
||||
label_scale_factor = 1
|
||||
)
|
||||
j_hat = self.add_vector([0, 1], color = Y_COLOR)
|
||||
j_label = self.label_vector(
|
||||
j_hat, "\\hat{\\jmath}",
|
||||
color = Y_COLOR,
|
||||
label_scale_val = 1
|
||||
label_scale_factor = 1
|
||||
)
|
||||
|
||||
self.dither()
|
||||
|
@ -648,7 +648,7 @@ class TrackBasisVectorsExample(LinearTransformationScene):
|
|||
def introduce_vector(self):
|
||||
v = self.add_vector(self.v_coords)
|
||||
coords = Matrix(self.v_coords)
|
||||
coords.scale(VECTOR_LABEL_SCALE_VAL)
|
||||
coords.scale(VECTOR_LABEL_SCALE_FACTOR)
|
||||
coords.next_to(v.get_end(), np.sign(self.v_coords[0])*RIGHT)
|
||||
|
||||
self.play(Write(coords, run_time = 1))
|
||||
|
|
|
@ -328,25 +328,84 @@ class BreakBlobIntoGridSquaresVeryGranular(BreakBlobIntoGridSquares):
|
|||
|
||||
class NameDeterminant(LinearTransformationScene):
|
||||
CONFIG = {
|
||||
"t_matrix" : [[1, 0], [2, 1]]
|
||||
"t_matrix" : [[3, 0], [2, 2]]
|
||||
}
|
||||
def construct(self):
|
||||
self.setup()
|
||||
self.add_unit_square()
|
||||
self.add_title(["The", "``determinant''", "of a transformation"])
|
||||
self.plane.fade(0.3)
|
||||
self.add_unit_square(color = YELLOW_E, opacity = 0.5)
|
||||
self.add_title(
|
||||
["The", "``determinant''", "of a transformation"],
|
||||
scale_factor = 1
|
||||
)
|
||||
self.title.split()[1].split()[1].highlight(YELLOW)
|
||||
|
||||
text = TextMobject("Area $=1$")
|
||||
text.move_to(self.square)
|
||||
matrix_background, matrix, det_text = self.get_matrix()
|
||||
self.add_foreground_mobject(matrix_background, matrix)
|
||||
|
||||
A = TexMobject("A")
|
||||
area_label = VMobject(A.copy(), A.copy(), A)
|
||||
area_label.move_to(self.square)
|
||||
det = np.linalg.det(self.t_matrix)
|
||||
self.add_moving_mobject(text, TextMobject("Area $=%d$"%det))
|
||||
self.show_frame()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if np.round(det) == det:
|
||||
det = int(det)
|
||||
area_label_target = VMobject(
|
||||
TexMobject(str(det)), TexMobject("\\cdot"), A.copy()
|
||||
)
|
||||
if det < 1 and det > 0:
|
||||
area_label_target.scale(det)
|
||||
area_label_target.arrange_submobjects(RIGHT, buff = 0.1)
|
||||
self.add_moving_mobject(area_label, area_label_target)
|
||||
|
||||
self.dither()
|
||||
self.apply_transposed_matrix(self.t_matrix)
|
||||
self.dither()
|
||||
det_mob_copy = area_label.split()[0].copy()
|
||||
new_det_mob = det_mob_copy.copy().scale_to_fit_height(
|
||||
det_text.split()[0].get_height()
|
||||
)
|
||||
new_det_mob.next_to(det_text, RIGHT, buff = 0.2)
|
||||
new_det_mob.add_background_rectangle()
|
||||
det_mob_copy.add_background_rectangle(opacity = 0)
|
||||
self.play(Write(det_text))
|
||||
self.play(Transform(det_mob_copy, new_det_mob))
|
||||
self.dither()
|
||||
|
||||
|
||||
def get_matrix(self):
|
||||
matrix = Matrix(np.array(self.t_matrix).transpose())
|
||||
matrix.highlight_columns(X_COLOR, Y_COLOR)
|
||||
matrix.next_to(self.title, DOWN, buff = 0.5)
|
||||
matrix.shift(2*LEFT)
|
||||
matrix_background = BackgroundRectangle(matrix)
|
||||
|
||||
braces = TexMobject("()")
|
||||
braces.scale(2)
|
||||
braces.stretch_to_fit_height(matrix.get_height())
|
||||
l_brace, r_brace = braces.split()
|
||||
l_brace.next_to(matrix, LEFT, buff = 0.1)
|
||||
r_brace.next_to(matrix, RIGHT, buff = 0.1)
|
||||
det = TextMobject("det").next_to(l_brace, LEFT, buff = 0.1)
|
||||
det.add_background_rectangle()
|
||||
eq = TexMobject("=").next_to(r_brace, RIGHT, buff = 0.1)
|
||||
|
||||
det_text = VMobject(det, l_brace, r_brace, eq)
|
||||
return matrix_background, matrix, det_text
|
||||
|
||||
class DeterminantIsOneHalf(NameDeterminant):
|
||||
CONFIG = {
|
||||
"t_matrix" : [[0.5, -0.5], [0.5, 0.5]],
|
||||
"foreground_plane_kwargs" : {
|
||||
"x_radius" : 2*SPACE_WIDTH,
|
||||
"y_radius" : 2*SPACE_WIDTH,
|
||||
"secondary_line_ratio" : 0
|
||||
},
|
||||
}
|
||||
|
||||
class DeterminantIsZero(NameDeterminant):
|
||||
CONFIG = {
|
||||
"t_matrix" : [[2, 1], [2, 1]],
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ from topics.geometry import Vector, Line, Circle, Arrow, Dot, BackgroundRectangl
|
|||
|
||||
from helpers import *
|
||||
|
||||
VECTOR_LABEL_SCALE_VAL = 0.8
|
||||
VECTOR_LABEL_SCALE_FACTOR = 0.8
|
||||
|
||||
def matrix_to_tex_string(matrix):
|
||||
matrix = np.array(matrix).astype("string")
|
||||
|
@ -39,7 +39,7 @@ def vector_coordinate_label(vector_mob, integer_labels = True,
|
|||
vect = vect[:n_dim]
|
||||
vect = vect.reshape((n_dim, 1))
|
||||
label = Matrix(vect, add_background_rectangles = True)
|
||||
label.scale(VECTOR_LABEL_SCALE_VAL)
|
||||
label.scale(VECTOR_LABEL_SCALE_FACTOR)
|
||||
|
||||
shift_dir = np.array(vector_mob.get_end())
|
||||
if shift_dir[0] >= 0: #Pointing right
|
||||
|
|
|
@ -13,7 +13,7 @@ from topics.geometry import Vector, Line, Circle, Arrow, Dot, \
|
|||
BackgroundRectangle, Square
|
||||
|
||||
from helpers import *
|
||||
from eola.matrix import Matrix, VECTOR_LABEL_SCALE_VAL, vector_coordinate_label
|
||||
from eola.matrix import Matrix, VECTOR_LABEL_SCALE_FACTOR, vector_coordinate_label
|
||||
|
||||
|
||||
X_COLOR = GREEN_C
|
||||
|
@ -78,7 +78,7 @@ class VectorScene(Scene):
|
|||
return [
|
||||
self.get_vector_label(
|
||||
vect, label, color = color,
|
||||
label_scale_val = 1,
|
||||
label_scale_factor = 1,
|
||||
**kwargs
|
||||
)
|
||||
for vect, label , color in [
|
||||
|
@ -91,12 +91,13 @@ class VectorScene(Scene):
|
|||
direction = "left",
|
||||
rotate = False,
|
||||
color = WHITE,
|
||||
label_scale_val = VECTOR_LABEL_SCALE_VAL):
|
||||
if len(label) == 1:
|
||||
label = "\\vec{\\textbf{%s}}"%label
|
||||
label = TexMobject(label)
|
||||
label.highlight(color)
|
||||
label.scale(label_scale_val)
|
||||
label_scale_factor = VECTOR_LABEL_SCALE_FACTOR):
|
||||
if not isinstance(label, TexMobject):
|
||||
if len(label) == 1:
|
||||
label = "\\vec{\\textbf{%s}}"%label
|
||||
label = TexMobject(label)
|
||||
label.highlight(color)
|
||||
label.scale(label_scale_factor)
|
||||
label.add_background_rectangle()
|
||||
|
||||
angle = vector.get_angle()
|
||||
|
@ -346,9 +347,9 @@ class LinearTransformationScene(VectorScene):
|
|||
self.transformable_labels.append(label_mob)
|
||||
return label_mob
|
||||
|
||||
def add_title(self, title, scale_val = 1.5, animate = False):
|
||||
def add_title(self, title, scale_factor = 1.5, animate = False):
|
||||
if not isinstance(title, Mobject):
|
||||
title = TextMobject(title).scale(scale_val)
|
||||
title = TextMobject(title).scale(scale_factor)
|
||||
title.to_edge(UP)
|
||||
title.add_background_rectangle()
|
||||
if animate:
|
||||
|
|
|
@ -17,7 +17,7 @@ class ImageMobject(PMobject):
|
|||
"invert" : True,
|
||||
"use_cache" : True,
|
||||
"stroke_width" : 1,
|
||||
"scale_value" : 1.0,
|
||||
"scale_factorue" : 1.0,
|
||||
"should_center" : True,
|
||||
}
|
||||
def __init__(self, image_file, **kwargs):
|
||||
|
@ -36,7 +36,7 @@ class ImageMobject(PMobject):
|
|||
for path in possible_paths:
|
||||
if os.path.exists(path):
|
||||
self.generate_points_from_file(path)
|
||||
self.scale(self.scale_value)
|
||||
self.scale(self.scale_factorue)
|
||||
if self.should_center:
|
||||
self.center()
|
||||
return
|
||||
|
|
|
@ -7,7 +7,7 @@ from helpers import *
|
|||
|
||||
class SVGMobject(VMobject):
|
||||
CONFIG = {
|
||||
"initial_scale_val" : 1,
|
||||
"initial_scale_factor" : 1,
|
||||
"should_center" : True,
|
||||
}
|
||||
def __init__(self, svg_file, **kwargs):
|
||||
|
@ -129,7 +129,7 @@ class SVGMobject(VMobject):
|
|||
def move_into_position(self):
|
||||
if self.should_center:
|
||||
self.center()
|
||||
self.scale_in_place(self.initial_scale_val)
|
||||
self.scale_in_place(self.initial_scale_factor)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ from topics.geometry import BackgroundRectangle
|
|||
from helpers import *
|
||||
import collections
|
||||
|
||||
TEX_MOB_SCALE_VAL = 0.05
|
||||
TEXT_MOB_SCALE_VAL = 0.05
|
||||
TEX_MOB_SCALE_FACTOR = 0.05
|
||||
TEXT_MOB_SCALE_FACTOR = 0.05
|
||||
|
||||
|
||||
class TexSymbol(VMobjectFromSVGPathstring):
|
||||
|
@ -35,7 +35,7 @@ class TexMobject(SVGMobject):
|
|||
"should_center" : True,
|
||||
"separate_list_arg_with_spaces" : True,
|
||||
"enforce_new_line_structure" : False,
|
||||
"initial_scale_val" : TEX_MOB_SCALE_VAL,
|
||||
"initial_scale_factor" : TEX_MOB_SCALE_FACTOR,
|
||||
"organize_left_to_right" : False,
|
||||
"propogate_style_to_family" : True,
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ class TexMobject(SVGMobject):
|
|||
)
|
||||
|
||||
def add_background_rectangle(self, color = BLACK, opacity = 0.75):
|
||||
rect = BackgroundRectangle(self)
|
||||
rect = BackgroundRectangle(self, color = color, opacity = opacity)
|
||||
letters = VMobject(*self.submobjects)
|
||||
self.submobjects = [rect, letters]
|
||||
return self
|
||||
|
@ -111,7 +111,7 @@ class TexMobject(SVGMobject):
|
|||
class TextMobject(TexMobject):
|
||||
CONFIG = {
|
||||
"template_tex_file" : TEMPLATE_TEXT_FILE,
|
||||
"initial_scale_val" : TEXT_MOB_SCALE_VAL,
|
||||
"initial_scale_factor" : TEXT_MOB_SCALE_FACTOR,
|
||||
"enforce_new_line_structure" : True,
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ from topics.number_line import *
|
|||
from mobject.region import Region, region_from_polygon_vertices
|
||||
from scene import Scene
|
||||
|
||||
RANDY_SCALE_VAL = 0.3
|
||||
RANDY_SCALE_FACTOR = 0.3
|
||||
|
||||
|
||||
|
||||
|
@ -239,7 +239,7 @@ class TryManyPaths(PathSlidingScene):
|
|||
randy = Randolph()
|
||||
randy.shift(-randy.get_bottom())
|
||||
self.slider = randy.copy()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
paths = self.get_paths()
|
||||
point_a = Dot(paths[0].points[0])
|
||||
point_b = Dot(paths[0].points[-1])
|
||||
|
@ -317,7 +317,7 @@ class TryManyPaths(PathSlidingScene):
|
|||
class RollingRandolph(PathSlidingScene):
|
||||
def construct(self):
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
self.add_cycloid_end_points()
|
||||
self.slide(randy, self.cycloid, roll = True)
|
||||
|
@ -334,7 +334,7 @@ class NotTheCircle(PathSlidingScene):
|
|||
path.gradient_highlight(RED_D, WHITE)
|
||||
radius = Line(ORIGIN, path.points[0])
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
randy_copy = randy.copy()
|
||||
words = TextMobject("Circular paths are good, \\\\ but still not the best")
|
||||
|
@ -367,7 +367,7 @@ class NotTheCircle(PathSlidingScene):
|
|||
class TransitionAwayFromSlide(PathSlidingScene):
|
||||
def construct(self):
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
self.add_cycloid_end_points()
|
||||
arrow = Arrow(ORIGIN, 2*RIGHT)
|
||||
|
@ -469,7 +469,7 @@ class WhatGovernsSpeed(PathSlidingScene):
|
|||
}
|
||||
def construct(self):
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
self.add_cycloid_end_points()
|
||||
points = self.cycloid.points
|
||||
|
@ -652,7 +652,7 @@ class DefineCurveWithKnob(PathSlidingScene):
|
|||
self.path.highlight(BLACK)
|
||||
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
|
||||
self.play(ShimmerIn(words))
|
||||
|
|
|
@ -536,7 +536,7 @@ class SlidingObject(CycloidScene, PathSlidingScene):
|
|||
CycloidScene.construct(self)
|
||||
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
central_randy = randy.copy()
|
||||
start_randy = self.adjust_mobject_to_index(
|
||||
|
|
|
@ -22,7 +22,7 @@ from scene import Scene
|
|||
from scene.zoomed_scene import ZoomedScene
|
||||
|
||||
from brachistochrone.curves import \
|
||||
Cycloid, PathSlidingScene, RANDY_SCALE_VAL, TryManyPaths
|
||||
Cycloid, PathSlidingScene, RANDY_SCALE_FACTOR, TryManyPaths
|
||||
|
||||
|
||||
class Lens(Arc):
|
||||
|
@ -846,7 +846,7 @@ class SpringSetup(ShowMultiplePathsInWater):
|
|||
class WhatGovernsTheSpeedOfLight(PhotonScene, PathSlidingScene):
|
||||
def construct(self):
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
self.add_cycloid_end_points()
|
||||
|
||||
|
|
|
@ -337,7 +337,7 @@ class ShowLightAndSlidingObject(MultilayeredScene, TryManyPaths, PhotonScene):
|
|||
path.rgbs[:,2] = 0
|
||||
loop = paths.pop(1) ##Bad!
|
||||
randy = Randolph()
|
||||
randy.scale(RANDY_SCALE_VAL)
|
||||
randy.scale(RANDY_SCALE_FACTOR)
|
||||
randy.shift(-randy.get_bottom())
|
||||
photon_run = self.photon_run_along_path(
|
||||
loop,
|
||||
|
|
|
@ -17,8 +17,8 @@ from moser_main import EulersFormula
|
|||
from script_wrapper import command_line_create_scene
|
||||
|
||||
MOVIE_PREFIX = "ecf_graph_scenes/"
|
||||
RANDOLPH_SCALE_VAL = 0.3
|
||||
EDGE_ANNOTATION_SCALE_VAL = 0.7
|
||||
RANDOLPH_SCALE_FACTOR = 0.3
|
||||
EDGE_ANNOTATION_SCALE_FACTOR = 0.7
|
||||
DUAL_CYCLE = [3, 4, 5, 6, 1, 0, 2, 3]
|
||||
|
||||
class EulersFormulaWords(Scene):
|
||||
|
@ -162,7 +162,7 @@ class OldIntroduceGraphs(GraphScene):
|
|||
self.clear()
|
||||
self.add(*self.edges)
|
||||
self.replace_vertices_with(Face().scale(0.4))
|
||||
friends = TextMobject("Friends").scale(EDGE_ANNOTATION_SCALE_VAL)
|
||||
friends = TextMobject("Friends").scale(EDGE_ANNOTATION_SCALE_FACTOR)
|
||||
self.annotate_edges(friends.shift((0, friends.get_height()/2, 0)))
|
||||
self.play(*[
|
||||
CounterclockwiseTransform(vertex, Dot(point))
|
||||
|
@ -282,11 +282,11 @@ class ThreePiecesOfTerminology(GraphScene):
|
|||
]
|
||||
]
|
||||
self.generate_spanning_tree()
|
||||
scale_val = 1.2
|
||||
scale_factor = 1.2
|
||||
def accent(mobject, color = "yellow"):
|
||||
return mobject.scale_in_place(scale_val).highlight(color)
|
||||
return mobject.scale_in_place(scale_factor).highlight(color)
|
||||
def tone_down(mobject):
|
||||
return mobject.scale_in_place(1.0/scale_val).highlight("white")
|
||||
return mobject.scale_in_place(1.0/scale_factor).highlight("white")
|
||||
|
||||
self.add(accent(cycles))
|
||||
self.trace_cycle(run_time = 1.0)
|
||||
|
@ -332,7 +332,7 @@ class WalkingRandolph(GraphScene):
|
|||
GraphScene.construct(self)
|
||||
point_path = [self.points[i] for i in self.path]
|
||||
randy = Randolph()
|
||||
randy.scale(RANDOLPH_SCALE_VAL)
|
||||
randy.scale(RANDOLPH_SCALE_FACTOR)
|
||||
randy.move_to(point_path[0])
|
||||
for next, last in zip(point_path[1:], point_path):
|
||||
self.play(
|
||||
|
@ -416,7 +416,7 @@ class IntroduceRandolph(GraphScene):
|
|||
name = TextMobject("Randolph")
|
||||
self.play(Transform(
|
||||
randy,
|
||||
deepcopy(randy).scale(RANDOLPH_SCALE_VAL).move_to(self.points[0]),
|
||||
deepcopy(randy).scale(RANDOLPH_SCALE_FACTOR).move_to(self.points[0]),
|
||||
))
|
||||
self.dither()
|
||||
name.shift((0, 1, 0))
|
||||
|
@ -427,15 +427,15 @@ class DefineSpanningTree(GraphScene):
|
|||
def construct(self):
|
||||
GraphScene.construct(self)
|
||||
randy = Randolph()
|
||||
randy.scale(RANDOLPH_SCALE_VAL).move_to(self.points[0])
|
||||
randy.scale(RANDOLPH_SCALE_FACTOR).move_to(self.points[0])
|
||||
dollar_signs = TextMobject("\\$\\$")
|
||||
dollar_signs.scale(EDGE_ANNOTATION_SCALE_VAL)
|
||||
dollar_signs.scale(EDGE_ANNOTATION_SCALE_FACTOR)
|
||||
dollar_signs = Mobject(*[
|
||||
deepcopy(dollar_signs).shift(edge.get_center())
|
||||
for edge in self.edges
|
||||
])
|
||||
unneeded = TextMobject("unneeded!")
|
||||
unneeded.scale(EDGE_ANNOTATION_SCALE_VAL)
|
||||
unneeded.scale(EDGE_ANNOTATION_SCALE_FACTOR)
|
||||
self.generate_spanning_tree()
|
||||
def green_dot_at_index(index):
|
||||
return Dot(
|
||||
|
@ -546,7 +546,7 @@ class FacebookGraph(GraphScene):
|
|||
account.shift(0.2*LEFT + 0.1*UP)
|
||||
friends = TexMobject(
|
||||
"\\leftarrow \\text{friends} \\rightarrow"
|
||||
).scale(0.5*EDGE_ANNOTATION_SCALE_VAL)
|
||||
).scale(0.5*EDGE_ANNOTATION_SCALE_FACTOR)
|
||||
|
||||
self.clear()
|
||||
accounts = [
|
||||
|
@ -873,7 +873,7 @@ class CyclesCorrespondWithConnectedComponents(GraphScene):
|
|||
dual_cycle = DUAL_CYCLE
|
||||
enclosed_vertices = [0, 1]
|
||||
randy = Randolph()
|
||||
randy.scale(RANDOLPH_SCALE_VAL)
|
||||
randy.scale(RANDOLPH_SCALE_FACTOR)
|
||||
randy.move_to(self.points[cycle[0]])
|
||||
|
||||
lines_to_remove = []
|
||||
|
@ -933,8 +933,8 @@ class IntroduceMortimer(GraphScene):
|
|||
self.add(morty, name)
|
||||
self.dither()
|
||||
self.remove(name)
|
||||
small_randy = deepcopy(randy).scale(RANDOLPH_SCALE_VAL)
|
||||
small_morty = deepcopy(morty).scale(RANDOLPH_SCALE_VAL)
|
||||
small_randy = deepcopy(randy).scale(RANDOLPH_SCALE_FACTOR)
|
||||
small_morty = deepcopy(morty).scale(RANDOLPH_SCALE_FACTOR)
|
||||
small_randy.move_to(self.points[randy_path[0]])
|
||||
small_morty.move_to(self.dual_points[morty_path[0]])
|
||||
self.play(*[
|
||||
|
@ -978,8 +978,8 @@ class RandolphMortimerSpanningTreeGame(GraphScene):
|
|||
self.generate_spanning_tree()
|
||||
self.generate_dual_graph()
|
||||
self.generate_regions()
|
||||
randy = Randolph().scale(RANDOLPH_SCALE_VAL)
|
||||
morty = Mortimer().scale(RANDOLPH_SCALE_VAL)
|
||||
randy = Randolph().scale(RANDOLPH_SCALE_FACTOR)
|
||||
morty = Mortimer().scale(RANDOLPH_SCALE_FACTOR)
|
||||
randy.move_to(self.points[0])
|
||||
morty.move_to(self.dual_points[0])
|
||||
attempted_dual_point_index = 2
|
||||
|
@ -1028,7 +1028,7 @@ class MortimerCannotTraverseCycle(GraphScene):
|
|||
self.generate_dual_graph()
|
||||
dual_cycle = DUAL_CYCLE
|
||||
trapped_points = [0, 1]
|
||||
morty = Mortimer().scale(RANDOLPH_SCALE_VAL)
|
||||
morty = Mortimer().scale(RANDOLPH_SCALE_FACTOR)
|
||||
morty.move_to(self.dual_points[dual_cycle[0]])
|
||||
time_per_edge = 0.5
|
||||
text = TextMobject("""
|
||||
|
@ -1105,10 +1105,10 @@ class DualSpanningTree(GraphScene):
|
|||
self.generate_dual_graph()
|
||||
self.generate_spanning_tree()
|
||||
randy = Randolph()
|
||||
randy.scale(RANDOLPH_SCALE_VAL)
|
||||
randy.scale(RANDOLPH_SCALE_FACTOR)
|
||||
randy.move_to(self.points[0])
|
||||
morty = Mortimer()
|
||||
morty.scale(RANDOLPH_SCALE_VAL)
|
||||
morty.scale(RANDOLPH_SCALE_FACTOR)
|
||||
morty.move_to(self.dual_points[0])
|
||||
dual_edges = [1, 3, 4, 7, 11, 9, 13]
|
||||
words = TextMobject("""
|
||||
|
|
|
@ -806,26 +806,26 @@ class ZoomInOnOne(Scene):
|
|||
)
|
||||
|
||||
num_levels = 3
|
||||
scale_val = 10
|
||||
scale_factor = 10
|
||||
number_lines = [
|
||||
NumberLine(
|
||||
interval_size = 1,
|
||||
density = scale_val*DEFAULT_POINT_DENSITY_1D
|
||||
density = scale_factor*DEFAULT_POINT_DENSITY_1D
|
||||
).filter_out(
|
||||
lambda (x, y, z):abs(y)>0.1
|
||||
).scale(1.0/scale_val**x)
|
||||
).scale(1.0/scale_factor**x)
|
||||
for x in range(num_levels)
|
||||
]
|
||||
kwargs = {"rate_func" : None}
|
||||
self.play(*[
|
||||
ApplyMethod(number_lines[x].scale, scale_val, **kwargs)
|
||||
ApplyMethod(number_lines[x].scale, scale_factor, **kwargs)
|
||||
for x in range(1, num_levels)
|
||||
]+[
|
||||
ApplyMethod(number_lines[0].stretch, scale_val, 0, **kwargs),
|
||||
ApplyMethod(number_lines[0].stretch, scale_factor, 0, **kwargs),
|
||||
]+[
|
||||
ApplyMethod(
|
||||
all_numbers[i].shift,
|
||||
2*LEFT*(scale_val-1)*(-1)**i,
|
||||
2*LEFT*(scale_factor-1)*(-1)**i,
|
||||
**kwargs
|
||||
)
|
||||
for i in 0, 1
|
||||
|
|
|
@ -97,7 +97,7 @@ class Piano(ImageMobject):
|
|||
CONFIG = {
|
||||
"stroke_width" : 1,
|
||||
"invert" : False,
|
||||
"scale_value" : 0.5
|
||||
"scale_factorue" : 0.5
|
||||
}
|
||||
def __init__(self, **kwargs):
|
||||
digest_config(self, kwargs)
|
||||
|
@ -1213,25 +1213,25 @@ class StepsToSolution(IntervalScene):
|
|||
|
||||
def add_terms(self):
|
||||
self.ones = []
|
||||
scale_val = 0.6
|
||||
scale_factor = 0.6
|
||||
plus = None
|
||||
for count in range(1, 10):
|
||||
frac_bottom = TexMobject("\\over %d"%(2**count))
|
||||
frac_bottom.scale(scale_val)
|
||||
one = TexMobject("1").scale(scale_val)
|
||||
frac_bottom.scale(scale_factor)
|
||||
one = TexMobject("1").scale(scale_factor)
|
||||
one.next_to(frac_bottom, UP, buff = 0.1)
|
||||
compound = Mobject(frac_bottom, one)
|
||||
if plus:
|
||||
compound.next_to(plus)
|
||||
else:
|
||||
compound.to_edge(LEFT)
|
||||
plus = TexMobject("+").scale(scale_val)
|
||||
plus = TexMobject("+").scale(scale_factor)
|
||||
plus.next_to(compound)
|
||||
frac_bottom, one = compound.split()
|
||||
self.ones.append(one)
|
||||
self.add(frac_bottom, one, plus)
|
||||
self.dither(0.2)
|
||||
dots = TexMobject("\\dots").scale(scale_val).next_to(plus)
|
||||
dots = TexMobject("\\dots").scale(scale_factor).next_to(plus)
|
||||
arrow = Arrow(ORIGIN, RIGHT).next_to(dots)
|
||||
one = TexMobject("1").next_to(arrow)
|
||||
self.ones.append(one)
|
||||
|
|
|
@ -13,7 +13,7 @@ A_COLOR = BLUE
|
|||
B_COLOR = MAROON_D
|
||||
C_COLOR = YELLOW
|
||||
|
||||
TEX_MOB_SCALE_VAL = 0.5
|
||||
TEX_MOB_SCALE_FACTOR = 0.5
|
||||
POINTS = np.array([
|
||||
DOWN,
|
||||
2*UP,
|
||||
|
@ -47,7 +47,7 @@ class Triangle(Polygon):
|
|||
return self
|
||||
|
||||
def add_letter(self, char, nudge = 0.3):
|
||||
mob = TexMobject(char).scale(TEX_MOB_SCALE_VAL)
|
||||
mob = TexMobject(char).scale(TEX_MOB_SCALE_FACTOR)
|
||||
if char == "a":
|
||||
points = self.get_vertices()[[0, 2, 1]]
|
||||
elif char == "b":
|
||||
|
@ -89,7 +89,7 @@ def c_square(**kwargs):
|
|||
class DrawPointsReference(Scene):
|
||||
def construct(self):
|
||||
for point, count in zip(POINTS, it.count()):
|
||||
mob = TexMobject(str(count)).scale(TEX_MOB_SCALE_VAL)
|
||||
mob = TexMobject(str(count)).scale(TEX_MOB_SCALE_FACTOR)
|
||||
mob.shift(POINTS[count])
|
||||
self.add(mob)
|
||||
|
||||
|
@ -104,7 +104,7 @@ class DrawAllThreeSquares(Scene):
|
|||
c = c_square()
|
||||
self.add(Triangle(), a, b, c)
|
||||
for letter, mob in zip("abc", [a, b, c]):
|
||||
char_mob = TexMobject(letter+"^2").scale(TEX_MOB_SCALE_VAL)
|
||||
char_mob = TexMobject(letter+"^2").scale(TEX_MOB_SCALE_FACTOR)
|
||||
char_mob.shift(mob.get_center())
|
||||
self.add(char_mob)
|
||||
|
||||
|
@ -235,8 +235,8 @@ class ShowBigRectangleDimensions(DrawAllThreeSquaresWithMoreTriangles):
|
|||
for brace in u_brace, side_brace:
|
||||
brace.shift(0.2*DOWN)
|
||||
side_brace.rotate(-np.pi/2)
|
||||
a_plus_2b = TexMobject("a+2b").scale(TEX_MOB_SCALE_VAL)
|
||||
b_plus_2a = TexMobject("b+2a").scale(TEX_MOB_SCALE_VAL)
|
||||
a_plus_2b = TexMobject("a+2b").scale(TEX_MOB_SCALE_FACTOR)
|
||||
b_plus_2a = TexMobject("b+2a").scale(TEX_MOB_SCALE_FACTOR)
|
||||
a_plus_2b.next_to(u_brace, DOWN)
|
||||
b_plus_2a.next_to(side_brace, LEFT)
|
||||
self.add_mobjects_among(locals().values())
|
||||
|
@ -263,7 +263,7 @@ class DrawOnlyABSquares(Scene):
|
|||
a = a_square()
|
||||
b = b_square()
|
||||
for char, mob in zip("ab", [a, b]):
|
||||
symobl = TexMobject(char+"^2").scale(TEX_MOB_SCALE_VAL)
|
||||
symobl = TexMobject(char+"^2").scale(TEX_MOB_SCALE_FACTOR)
|
||||
symobl.shift(mob.get_center())
|
||||
self.add(symobl)
|
||||
triangle = Triangle()
|
||||
|
@ -394,8 +394,8 @@ class ZoomInOnTroublePoint(Scene):
|
|||
for mob in self.mobjects:
|
||||
mob.rotate(np.pi/2)
|
||||
if with_labels:
|
||||
alpha = TexMobject("\\alpha").scale(TEX_MOB_SCALE_VAL)
|
||||
beta = TexMobject("90-\\alpha").scale(TEX_MOB_SCALE_VAL)
|
||||
alpha = TexMobject("\\alpha").scale(TEX_MOB_SCALE_FACTOR)
|
||||
beta = TexMobject("90-\\alpha").scale(TEX_MOB_SCALE_FACTOR)
|
||||
if rotate:
|
||||
alpha.next_to(angle1_arc, UP+0.1*LEFT)
|
||||
beta.next_to(angle2_arc, DOWN+0.5*LEFT)
|
||||
|
@ -446,7 +446,7 @@ class LabelLargeSquare(DrawCSquareWithAllTraingles):
|
|||
u_brace.shift(0.2*DOWN)
|
||||
side_brace = deepcopy(u_brace).rotate(np.pi/2)
|
||||
upper_brace = deepcopy(u_brace).rotate(np.pi)
|
||||
a_plus_b = TexMobject("a+b").scale(TEX_MOB_SCALE_VAL)
|
||||
a_plus_b = TexMobject("a+b").scale(TEX_MOB_SCALE_FACTOR)
|
||||
upper_brace.add(a_plus_b.next_to(upper_brace, UP))
|
||||
side_brace.add(a_plus_b.next_to(side_brace, RIGHT))
|
||||
self.add(upper_brace, side_brace)
|
||||
|
|
|
@ -11,7 +11,7 @@ from scene import Scene
|
|||
|
||||
|
||||
PI_CREATURE_DIR = os.path.join(IMAGE_DIR, "PiCreature")
|
||||
PI_CREATURE_SCALE_VAL = 0.5
|
||||
PI_CREATURE_SCALE_FACTOR = 0.5
|
||||
|
||||
MOUTH_INDEX = 5
|
||||
BODY_INDEX = 4
|
||||
|
@ -26,7 +26,7 @@ class PiCreature(SVGMobject):
|
|||
"color" : BLUE_E,
|
||||
"stroke_width" : 0,
|
||||
"fill_opacity" : 1.0,
|
||||
"initial_scale_val" : 0.01,
|
||||
"initial_scale_factor" : 0.01,
|
||||
"corner_scale_factor" : 0.75,
|
||||
"flip_at_start" : False,
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ class RangingValues(Animation):
|
|||
"value_function" : None,
|
||||
"tracked_mobject" : None,
|
||||
"tracked_mobject_next_to_kwargs" : {},
|
||||
"scale_val" : None
|
||||
"scale_factor" : None
|
||||
}
|
||||
def __init__(self, start_val = 0, end_val = 1, **kwargs):
|
||||
digest_config(self, kwargs, locals())
|
||||
|
@ -60,8 +60,8 @@ class RangingValues(Animation):
|
|||
self.get_number(alpha),
|
||||
num_decimal_points=self.num_decimal_points
|
||||
)
|
||||
if self.scale_val:
|
||||
mob.scale(self.scale_val)
|
||||
if self.scale_factor:
|
||||
mob.scale(self.scale_factor)
|
||||
if self.tracking_function:
|
||||
self.tracking_function(alpha, mob)
|
||||
elif self.tracked_mobject:
|
||||
|
|
Loading…
Add table
Reference in a new issue