3b1b-manim/active_projects/eola2/cramer.py

164 lines
2.6 KiB
Python
Raw Normal View History

2018-04-24 16:09:53 -07:00
from big_ol_pile_of_manim_imports import *
X_COLOR = GREEN
Y_COLOR = RED
Z_COLOR = BLUE
OUTPUT_COLOR = MAROON_B
def get_cramer_matrix(matrix, output_vect):
"""
The inputs matrix and output_vect should be Matrix mobjects
"""
# new_matrix = np.append(
# matrix.mob_matrix[:, :2],
# output_vect,
# axis=1
# )
pass
class LinearSystem(VGroup):
CONFIG = {
"matrix_config": {
"element_to_mobject": Integer,
},
"dimensions": 3,
"min_int": -9,
"max_int": 10,
"height": 4,
}
def __init__(self, matrix=None, output_vect=None, **kwargs):
VGroup.__init__(self, **kwargs)
dim = self.dimensions
if matrix is None:
matrix = np.random.randint(
self.min_int,
self.max_int,
size=(dim, dim)
)
self.matrix_mobject = IntegerMatrix(matrix)
self.equals = TexMobject("=")
self.equals.scale(1.5)
colors = [X_COLOR, Y_COLOR, Z_COLOR][:dim]
self.input_vect_mob = Matrix(np.array(["x", "y", "z"]))
self.input_vect_mob.elements.set_color_by_gradient(*colors)
if output_vect is None:
output_vect = np.random.randint(self.min_int, self.max_int, size=(dim, 1))
self.output_vect_mob = IntegerMatrix(output_vect)
self.output_vect_mob.elements.set_color(OUTPUT_COLOR)
for mob in self.matrix_mobject, self.input_vect_mob, self.output_vect_mob:
mob.scale_to_fit_height(self.height)
self.add(
self.matrix_mobject,
self.input_vect_mob,
self.equals,
self.output_vect_mob,
)
self.arrange_submobjects(RIGHT, buff=SMALL_BUFF)
# Scenes
class LeaveItToComputers(TeacherStudentsScene):
CONFIG = {
"random_seed": 1,
}
def construct(self):
system = LinearSystem(height=3)
system.next_to(self.pi_creatures, UP)
system.generate_target()
system.target.scale(0.5)
system.target.to_corner(UL)
self.play(
Write(system),
self.teacher.change, "raise_right_hand",
self.get_student_changes("pondering", "thinking", "hooray")
)
self.wait(2)
self.play(
PiCreatureSays(
self.teacher, "Let the computer \\\\ handle it",
target_mode="shruggie",
),
MoveToTarget(system, rate_func=running_start),
self.get_student_changes(*["confused"] * 3)
)
self.wait(3)