summaryrefslogtreecommitdiff
path: root/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)
diff options
context:
space:
mode:
Diffstat (limited to 'FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)')
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/README.md30
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt3
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gifbin0 -> 9471592 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gifbin0 -> 52608896 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gifbin0 -> 31583525 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gifbin0 -> 3303032 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gifbin0 -> 1389092 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py34
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_before_matrix.py233
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_square.py246
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Understand_Linear_Transformations_visually.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_Understand_Linear_Transformations_visually.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Uniform_Scaling.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_Uniform_Scaling.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear_gif.gif (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear_gif.gif)bin1566999 -> 1566999 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear_gif.gif (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear_gif.gif)bin1347079 -> 1347079 bytes
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file8_linear_transformation.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_linear_transformation.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gifbin0 -> 14973890 bytes
18 files changed, 540 insertions, 6 deletions
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/README.md b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/README.md
new file mode 100644
index 0000000..2a46424
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/README.md
@@ -0,0 +1,30 @@
+# Contributer: Archit Sangal
+My Github Account : <a href="https://github.com/architsangal">architsangal</a> (https://github.com/architsangal)
+<br/></br>
+
+## Sub-Topics Covered:
++ Linear Transformations (Linear Maps)
+
+#### Video 1: Visually understanding linear transformation(using grid)
+![GIF1](file12.gif)
+
+#### Video 2: Linear Transformation when form 1 is given
+![GIF2](file11.gif)
+
+#### Video 3: Matrix Representation Of Linear Transformation
+![GIF3](file9.gif)
+
+#### Video 4: Understand Linear Transformations visually
+![GIF4](file13.gif)
+
+#### Video 5: Uniform Scaling
+![GIF5](file14.gif)
+
+#### Fig.1 Horizontal Shear
+![GIF6](file6_Horizontal_Shear_gif.gif)
+
+#### Fig.2 Vertical Shear
+![GIF7](file7_Vertical_Shear_gif.gif)
+
+#### Video 6: Rotation by an angle of in anticlockwise direction
+![GIF8](file10.gif) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt
deleted file mode 100644
index cae98ce..0000000
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-file 'text.mp4'
-file 'LinearTransformation.mp4'
-file 'NonLinearTransformation.mp4'
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gif
new file mode 100644
index 0000000..d996130
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gif
new file mode 100644
index 0000000..d8c64b7
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gif
new file mode 100644
index 0000000..92bdff6
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gif
new file mode 100644
index 0000000..ba6c156
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gif
new file mode 100644
index 0000000..fd9bc7b
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py
index 677f890..0182bd9 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py
@@ -2,16 +2,20 @@ from manimlib.imports import *
class text(Scene):
def construct(self):
- text1 = TextMobject("For a grid, undergoing a linear transformation, all it's straight lines")
+ text1 = TextMobject("For a grid, undergoing a linear transformation, all its straight lines")
text1.scale(0.9)
text2 = TextMobject("must either remain straight lines or sends to a point in the grid formed")
text2.scale(0.9)
+ text3 = TextMobject("Origin must remain where it was before transformation.")
+ text3.scale(0.9)
text1.move_to(ORIGIN+UP)
text2.move_to(ORIGIN)
+ text3.move_to(ORIGIN+DOWN)
self.play(Write(text1))
self.play(Write(text2))
+ self.play(Write(text3))
self.wait()
- self.play(FadeOut(text1),FadeOut(text2))
+ self.play(FadeOut(text1),FadeOut(text2),FadeOut(text3))
class LinearTransformation(LinearTransformationScene):
CONFIG = {
@@ -34,6 +38,7 @@ class NonLinearTransformation(Scene):
def construct(self):
grid = NumberPlane()
self.play(ShowCreation(grid),run_time =2)
+ # I have taken reference from purusharth's code
NonLinearTrans = lambda coordinates : coordinates + np.array([np.sin(coordinates[1]),np.sin(coordinates[0]),0,])
grid.prepare_for_nonlinear_transform()
self.play(grid.apply_function,NonLinearTrans)
@@ -42,4 +47,27 @@ class NonLinearTransformation(Scene):
text[1].move_to(1.5*DOWN+4*LEFT)
text.add_background_rectangle()
self.play(Write(text))
- self.wait() \ No newline at end of file
+ self.wait()
+
+class MoveOrigin(LinearTransformationScene):
+
+ CONFIG = {
+ "show_basis_vectors": False,
+ }
+ def construct(self):
+ self.wait()
+
+ dot = Dot(ORIGIN, color = YELLOW)
+ self.add_transformable_mobject(dot)
+ self.apply_nonlinear_transformation(self.func)
+ text = TextMobject("This is also not a linear transformation as the origin moves from its original position")
+ text.move_to(2*DOWN)
+ text.scale(0.5)
+ text.set_color(YELLOW)
+ text.add_background_rectangle()
+ self.play(Write(text))
+ self.wait()
+
+ def func(self, point):
+ matrix_transform = self.get_matrix_transformation([[1, -1], [1, 1]])
+ return matrix_transform(point) + UP+ RIGHT
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_before_matrix.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_before_matrix.py
new file mode 100755
index 0000000..1f6badd
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_before_matrix.py
@@ -0,0 +1,233 @@
+from manimlib.imports import *
+
+class Linear(GraphScene):
+
+ CONFIG = {
+ "x_min": -5,
+ "x_max": 5,
+ "y_min": -5,
+ "y_max": 5,
+ "graph_origin": ORIGIN,
+ "x_labeled_nums": list(range(-5, 6)),
+ "y_labeled_nums": list(range(-5, 6)),
+ "x_axis_width": 7,
+ "y_axis_height": 7,
+ }
+
+ def construct(self):
+
+ XTD = self.x_axis_width/(self.x_max- self.x_min)
+ YTD = self.y_axis_height/(self.y_max- self.y_min)
+
+ self.setup_axes(animate = True)
+ heading = TextMobject(r"$T(x,y) = T(x+2y,x-y)$")
+ heading.move_to(UP*3+LEFT*4)
+ heading.scale(0.7)
+ self.play(Write(heading))
+ self.wait()
+
+ before = TextMobject("Before Linear Transformation")
+ before.set_color(ORANGE)
+ before.move_to(3*UP+4*RIGHT)
+ before.scale(0.75)
+ dot1 = Dot().shift(self.graph_origin+1*XTD*RIGHT+1*YTD*UP)
+ dot2 = Dot().shift(self.graph_origin+2*XTD*RIGHT+1*YTD*UP)
+ dot1.set_color(ORANGE)
+ dot2.set_color(ORANGE)
+ p1 = TextMobject(r"$P_1$")
+ p1.scale(0.75)
+ p1.set_color(ORANGE)
+ p1.move_to(self.graph_origin+1*XTD*RIGHT+1.5*YTD*UP)
+ p2 = TextMobject(r"$P_2$")
+ p2.set_color(ORANGE)
+ p2.scale(0.75)
+ p2.move_to(self.graph_origin+2*XTD*RIGHT+1.5*YTD*UP)
+
+ after = TextMobject("After applying Linear Transformation")
+ after.set_color(YELLOW)
+ after.move_to(3*UP+4.5*RIGHT)
+ after.scale(0.5)
+ dot3 = Dot().shift(self.graph_origin+3*XTD*RIGHT+0*YTD*UP)
+ dot4 = Dot().shift(self.graph_origin+4*XTD*RIGHT+1*YTD*UP)
+ dot3.set_color(YELLOW)
+ dot4.set_color(YELLOW)
+ p3 = TextMobject(r"$T(P_1)$")
+ p3.scale(0.7)
+ p3.set_color(YELLOW)
+ p3.move_to(self.graph_origin+3*XTD*RIGHT-1.1*YTD*UP)
+ p4 = TextMobject(r"$T(P_2)$")
+ p4.scale(0.7)
+ p4.set_color(YELLOW)
+ p4.move_to(self.graph_origin+4*XTD*RIGHT+1.5*YTD*UP)
+
+ self.play(Write(before), ShowCreation(dot1), ShowCreation(dot2),Write(p1), Write(p2))
+ self.wait(3)
+ self.play(Transform(before,after), Transform(dot1,dot3), Transform(dot2,dot4), Transform(p2,p4), Transform(p1,p3))
+ self.wait(3)
+
+
+class withgrid(LinearTransformationScene):
+ def construct(self):
+
+ heading = TextMobject(r"Now, imagine this happening for all the points")
+ heading.scale(0.5)
+ heading.move_to(UP*2.5+LEFT*4)
+ self.play(Write(heading))
+ self.wait()
+
+ before = TextMobject("Before Linear Transformation")
+ before.set_color(ORANGE)
+ before.move_to(3.5*UP+4*RIGHT)
+ before.scale(0.75)
+ dot1 = Dot().shift(1*RIGHT+1*UP)
+ dot2 = Dot().shift(2*RIGHT+1*UP)
+ dot1.set_color(ORANGE)
+ dot2.set_color(ORANGE)
+
+ dot1_c = Dot(radius = 0.05).shift(1*RIGHT+1*UP)
+ dot2_c = Dot(radius = 0.05).shift(2*RIGHT+1*UP)
+ dot1_c.set_color(YELLOW)
+ dot2_c.set_color(YELLOW)
+ self.add_transformable_mobject(dot1_c)
+ self.add_transformable_mobject(dot2_c)
+
+ p1 = TextMobject(r"$P_1$")
+ p1.scale(0.75)
+ p1.set_color(ORANGE)
+ p1.move_to(1*RIGHT+1.5*UP)
+ p2 = TextMobject(r"$P_2$")
+ p2.scale(0.75)
+ p2.set_color(ORANGE)
+ p2.move_to(2*RIGHT+1.5*UP)
+
+ after = TextMobject("After applying Linear Transformation")
+ after.set_color(YELLOW)
+ after.move_to(3.5*UP+3.5*RIGHT)
+ after.scale(0.75)
+ dot3 = Dot().shift(3*RIGHT+0*UP)
+ dot4 = Dot().shift(4*RIGHT+1*UP)
+ dot3.set_color(YELLOW)
+ dot4.set_color(YELLOW)
+ p3 = TextMobject(r"$T(P_1)$")
+ p3.scale(0.75)
+ p3.set_color(YELLOW)
+ p3.move_to(3*RIGHT-0.6*UP)
+ p4 = TextMobject(r"$T(P_2)$")
+ p4.scale(0.75)
+ p4.set_color(YELLOW)
+ p4.move_to(4*RIGHT+1.5*UP)
+
+ self.play(Write(before), ShowCreation(dot1), ShowCreation(dot2),Write(p1), Write(p2))
+ self.wait(3)
+ matrix = [[1,2],[1,-1]]
+ dot1.set_color(GREY)
+ dot2.set_color(GREY)
+ self.play(FadeIn(dot1),FadeIn(dot2))
+ self.apply_matrix(matrix)
+ self.play(Transform(before,after), Transform(p2,p4), Transform(p1,p3))
+ self.play(Transform(before,after))
+ self.wait(3)
+
+ ending = TextMobject(r"$T(\left[\begin{array}{c}x \\ y\end{array}\right]) = \left[\begin{array}{c} x+2y \\ x-y\end{array}\right]$")
+ ending.move_to(UP*2+LEFT*4)
+ self.play(Transform(heading,ending))
+ self.wait()
+
+from manimlib.imports import *
+class ThreeDExplanation(ThreeDScene):
+
+ def construct(self):
+
+ text = TextMobject(r"$T(x,y) = (x+y,x-y,x+2y)$")
+ text.scale(0.75)
+ text.move_to(UP*2.5+LEFT*4)
+ text.move_to(-UP*3+LEFT*4)
+ self.add_fixed_in_frame_mobjects(text)
+ self.play(Write(text))
+ self.wait()
+
+ before = TextMobject("Before Linear Transformation")
+ self.add_fixed_in_frame_mobjects(before)
+ before.set_color(ORANGE)
+ before.move_to(3.5*UP+4*RIGHT)
+ before.scale(0.75)
+
+ p1 = TextMobject(r"$P_1$")
+ p2 = TextMobject(r"$P_2$")
+ p3 = TextMobject(r"$P_3$")
+ p1.scale(0.75)
+ p2.scale(0.75)
+ p3.scale(0.75)
+ dot1 = Dot().shift(1*RIGHT+1*UP)
+ dot2 = Dot().shift(2*RIGHT+1*UP)
+ dot3 = Dot().shift(1*RIGHT+1*DOWN)
+ dot1.set_color(ORANGE)
+ dot2.set_color(ORANGE)
+ dot3.set_color(ORANGE)
+ self.play(ShowCreation(before))
+
+ p1.move_to(1*RIGHT+1*UP+[0,0,0.5])
+ p2.move_to(2*RIGHT+1*UP+[0,0,0.5])
+ p3.move_to(1*RIGHT-1*UP+[0,0,0.5])
+
+ dot1_c = Dot(radius = 0.05).shift(1*RIGHT+1*UP)
+ dot2_c = Dot(radius = 0.05).shift(0*RIGHT+2*UP)
+ dot3_c = Dot(radius = 0.05).shift(1*RIGHT-1*UP)
+ dot1_c.set_color(YELLOW)
+ dot2_c.set_color(YELLOW)
+ dot3_c.set_color(YELLOW)
+
+ axes = ThreeDAxes(x_min = -7,x_max=7,y_min=-4,y_max=4,z_min=-4,z_max=4)
+ self.play(ShowCreation(axes))
+ self.move_camera(distance = 100, phi=30*DEGREES,theta=45*DEGREES,run_time=3)
+
+ self.begin_ambient_camera_rotation(rate=0.3)
+ self.wait(1)
+ self.stop_ambient_camera_rotation()
+
+ plane = NumberPlane()
+ self.add_fixed_orientation_mobjects(p1)
+ self.add_fixed_orientation_mobjects(p2)
+ self.add_fixed_orientation_mobjects(p3)
+ self.play(ShowCreation(dot1),ShowCreation(dot3),ShowCreation(dot2),ShowCreation(plane))
+
+ self.play(FadeOut(before))
+ after = TextMobject("After applying Linear Transformation")
+ self.add_fixed_in_frame_mobjects(after)
+ after.set_color(YELLOW)
+ after.move_to(3.5*UP+3.5*RIGHT)
+ after.scale(0.75)
+
+ self.play(FadeOut(p1),FadeOut(p2),FadeOut(p3))
+ matrix = [[1,1],[1,-1],[2,1]]
+ self.play(FadeOut(dot1),FadeOut(dot2),FadeOut(dot3),ApplyMethod(plane.apply_matrix,matrix),ApplyMethod(dot1_c.apply_matrix,matrix),ApplyMethod(dot3_c.apply_matrix,matrix),ApplyMethod(dot2_c.apply_matrix,matrix))
+
+ p4 = TextMobject(r"$T(P_1)$")
+ p5 = TextMobject(r"$T(P_2)$")
+ p6 = TextMobject(r"$T(P_3)$")
+ p4.scale(0.75)
+ p5.scale(0.75)
+ p6.scale(0.75)
+ p4.move_to(2*RIGHT+0*UP+[0,0,3.5])
+ p5.move_to(2*RIGHT-2*UP+[0,0,2.5])
+ p6.move_to(0*RIGHT+2*UP+[0,0,1.5])
+ self.add_fixed_orientation_mobjects(p5)
+ self.add_fixed_orientation_mobjects(p4)
+ self.add_fixed_orientation_mobjects(p6)
+
+ self.begin_ambient_camera_rotation(rate=0.3)
+ self.wait(3)
+ self.stop_ambient_camera_rotation()
+
+ ending = TextMobject(r"$T(\left[\begin{array}{c}x \\ y\end{array}\right])$ = ",r"$\left[\begin{array}{c} x+y \\ x-y\\ x+2y \end{array}\right]$") #\begin{array}{c} x+y \\ x-y -- \\ x+2y -- \end{array}\right]$")
+ ending.scale(0.75)
+ ending.move_to(-UP*3+LEFT*4)
+ self.add_fixed_in_frame_mobjects(ending)
+ self.play(FadeOut(text),Write(ending))
+
+ self.play(FadeOut(plane))
+ self.wait(2)
+
+ self.begin_ambient_camera_rotation(rate=0.3)
+ self.wait(8)
+ self.stop_ambient_camera_rotation()
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_square.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_square.py
new file mode 100644
index 0000000..e828de4
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_square.py
@@ -0,0 +1,246 @@
+from manimlib.imports import *
+
+class Linear(GraphScene):
+ CONFIG = {
+ "x_min": -5,
+ "x_max": 5,
+ "y_min": -5,
+ "y_max": 5,
+ "graph_origin": ORIGIN,
+ "x_labeled_nums": list(range(-5, 6)),
+ "y_labeled_nums": list(range(-5, 6)),
+ "x_axis_width": 7,
+ "y_axis_height": 7,
+ }
+ def construct(self):
+
+ text = TextMobject("T(x,y) = T(x+y,y)")
+ text.scale(0.75)
+ text.set_color(PURPLE)
+ text.move_to(3*UP+5*LEFT)
+ self.play(Write(text))
+
+ XTD = self.x_axis_width/(self.x_max- self.x_min)
+ YTD = self.y_axis_height/(self.y_max- self.y_min)
+
+ self.setup_axes(animate = True)
+
+ text1 = TextMobject("Before Linear Transformation")
+ text1.scale(0.6)
+ text1.move_to(UP*3+3*RIGHT)
+
+ a = TextMobject("(1,1)")
+ b = TextMobject("(3,1)")
+ c = TextMobject("(3,2)")
+ d = TextMobject("(1,2)")
+ a.scale(0.5)
+ b.scale(0.5)
+ c.scale(0.5)
+ d.scale(0.5)
+ a.move_to(self.graph_origin+0.6*UP+0.6*RIGHT)
+ b.move_to(self.graph_origin+0.6*UP+3.4*RIGHT)
+ c.move_to(self.graph_origin+2.4*UP+3.4*RIGHT)
+ d.move_to(self.graph_origin+2.6*UP+0.6*RIGHT)
+
+ square = Polygon(self.graph_origin+UP+RIGHT,self.graph_origin+UP+3*RIGHT,self.graph_origin+2*UP+3*RIGHT,self.graph_origin+2*UP+RIGHT)
+
+ self.play(Write(text1), Write(a), Write(b), Write(c), Write(d), ShowCreation(square))
+ self.wait(2)
+ self.play(FadeOut(text1), FadeOut(a), FadeOut(b), FadeOut(c), FadeOut(d), ApplyMethod(square.apply_matrix,[[1,1],[0,1]]))
+
+ a = TextMobject("(2,1)")
+ b = TextMobject("(4,1)")
+ c = TextMobject("(3,2)")
+ d = TextMobject("(5,2)")
+ a.scale(0.5)
+ b.scale(0.5)
+ c.scale(0.5)
+ d.scale(0.5)
+ a.move_to(self.graph_origin+0.6*UP+1.6*RIGHT)
+ b.move_to(self.graph_origin+0.6*UP+4.4*RIGHT)
+ d.move_to(self.graph_origin+2.4*UP+5.4*RIGHT)
+ c.move_to(self.graph_origin+2.4*UP+2.6*RIGHT)
+
+ text1 = TextMobject("After Linear Transformation")
+ text1.scale(0.6)
+ text1.move_to(UP*3+3*RIGHT)
+
+ self.play(Write(text1), Write(a), Write(b), Write(c), Write(d))
+
+ self.wait(2)
+
+class grid(LinearTransformationScene):
+ def construct(self):
+
+ text = TextMobject("Now, consider all the vectors.")
+ text.scale(0.75)
+ text.set_color(PURPLE)
+ text.move_to(2.5*UP+3*LEFT)
+ self.play(Write(text))
+
+ text1 = TextMobject("Before Linear Transformation")
+ text1.scale(0.6)
+ text1.move_to(UP*3.5+3.5*RIGHT)
+
+ square = Polygon(UP+RIGHT,UP+3*RIGHT,2*UP+3*RIGHT,2*UP+RIGHT)
+ square.set_color(YELLOW)
+
+ self.play(Write(text1), ShowCreation(square))
+ self.wait(2)
+ self.play(FadeOut(text1))
+ self.add_transformable_mobject(square)
+
+ text1 = TextMobject("After Linear Transformation")
+ text1.scale(0.6)
+ text1.move_to(UP*3.5+3.5*RIGHT)
+
+ matrix = [[1,1],[0,1]]
+
+ self.apply_matrix(matrix)
+ self.play(Write(text1))
+
+ self.wait()
+
+class grid2(LinearTransformationScene):
+ CONFIG = {
+ "include_background_plane": True,
+ "include_foreground_plane": False,
+ "show_coordinates": True,
+ "show_basis_vectors": True,
+ "basis_vector_stroke_width": 3,
+ "i_hat_color": X_COLOR,
+ "j_hat_color": Y_COLOR,
+ "leave_ghost_vectors": True,
+ }
+
+ def construct(self):
+
+ text = TextMobject("Now, let us focus only on the standard basis")
+ text.scale(0.7)
+ text.set_color(PURPLE)
+ text.move_to(2.5*UP+3.5*LEFT)
+ self.play(Write(text))
+
+ text1 = TextMobject("Before Linear Transformation")
+ text1.scale(0.6)
+ text1.move_to(UP*3.5+3.5*RIGHT)
+
+ square = Polygon(UP+RIGHT,UP+3*RIGHT,2*UP+3*RIGHT,2*UP+RIGHT)
+ square.set_color(YELLOW)
+
+ self.play(Write(text1), ShowCreation(square))
+ self.wait(2)
+ self.play(FadeOut(text1))
+ self.add_transformable_mobject(square)
+
+ text1 = TextMobject("After Linear Transformation")
+ text1.scale(0.6)
+ text1.move_to(UP*3.5+3.5*RIGHT)
+
+ matrix = [[1,1],[0,1]]
+
+ self.apply_matrix(matrix)
+ self.play(Write(text1))
+
+ self.play(FadeOut(square), FadeOut(text1))
+
+ cor_x = TextMobject("(1,0)")
+ cor_y = TextMobject("(1,1)")
+ cor_x.scale(0.65)
+ cor_y.scale(0.65)
+ cor_y.move_to(1.25*RIGHT+1.5*UP)
+ cor_x.move_to(0.75*RIGHT-0.5*UP)
+ cor_x.set_color(GREEN)
+ cor_y.set_color(RED)
+
+ x_cor = TextMobject(r"$\left[\begin{array}{c} 1\\0\end{array}\right]$")
+ x_cor.set_color(GREEN)
+ x_cor.scale(0.5)
+ y_cor = TextMobject(r"$\left[\begin{array}{c} 1\\1\end{array}\right]$")
+ x_cor.move_to(0.75*RIGHT-0.5*UP)
+ y_cor.move_to(1.25*RIGHT+1.5*UP)
+ y_cor.set_color(RED)
+ y_cor.scale(0.5)
+
+ text1 = TextMobject(r"$T(\left[\begin{array}{c} x\\y \end{array}\right]) = $",r"$\left[\begin{array}{c} x+y\\y \end{array}\right]$")
+ text1.scale(0.7)
+ text1.set_color(PURPLE)
+ text1.move_to(1.5*UP+3*LEFT)
+
+ text = TextMobject(r"$T(x,y) = (x+y,y)$")
+ text.scale(0.6)
+ text.set_color(PURPLE)
+ text.move_to(1.5*UP+3*LEFT)
+
+ self.play(FadeIn(text),FadeIn(cor_x), FadeIn(cor_y))
+ self.wait()
+
+ self.play(Transform(text,text1), Transform(cor_x,x_cor), Transform(cor_y,y_cor))
+
+ text3 = TextMobject(r"$\left[\begin{array}{c} x+y\\y \end{array}\right]$")
+ text3.scale(0.7)
+ text3.set_color(PURPLE)
+ text3.move_to(1.5*DOWN+5*LEFT)
+
+ equal = TextMobject("=")
+ equal.move_to(1.5*DOWN+3.5*LEFT)
+
+ text3 = TextMobject("[")
+ text4 = TextMobject(r"$\begin{array}{c} (1)x\\(0)x \end{array}$")
+ text5 = TextMobject(r"$\begin{array}{c} + \\ + \end{array}$")
+ text6 = TextMobject(r"$\begin{array}{c} (1)y\\(1)y \end{array}$")
+ text7 = TextMobject("]")
+ text3.scale(2)
+ text4.scale(0.7)
+ text5.scale(0.7)
+ text6.scale(0.7)
+ text7.scale(2)
+ text4.set_color(GREEN)
+ text5.set_color(PURPLE)
+ text6.set_color(RED)
+ text3.move_to(1.5*DOWN+3*LEFT)
+ text4.move_to(1.5*DOWN+2.5*LEFT)
+ text5.move_to(1.5*DOWN+2*LEFT)
+ text6.move_to(1.5*DOWN+1.5*LEFT)
+ text7.move_to(1.5*DOWN+1*LEFT)
+
+ text1[1].scale(1.2)
+ self.play(FadeOut(text1[0]), ApplyMethod(text1[1].move_to,1.5*DOWN+5*LEFT), FadeIn(text3), FadeIn(equal), FadeIn(text4), FadeIn(text5), FadeIn(text6), FadeIn(text7))
+
+ self.wait()
+ self.play(FadeOut(text1[1]))
+
+ self.play(ApplyMethod(text3.move_to,1.5*DOWN+6*LEFT),
+ ApplyMethod(text4.move_to,1.5*DOWN+5.5*LEFT),
+ ApplyMethod(text5.move_to,1.5*DOWN+5*LEFT),
+ ApplyMethod(text6.move_to,1.5*DOWN+4.5*LEFT),
+ ApplyMethod(text7.move_to,1.5*DOWN+4*LEFT))
+
+ text10 = TextMobject("[")
+ text11 = TextMobject(r"$\begin{array}{c} 1\\0 \end{array}$")
+ text13 = TextMobject(r"$\begin{array}{c} 1\\1 \end{array}$")
+ text14 = TextMobject("]")
+ text10.scale(2)
+ text11.scale(0.7)
+ text13.scale(0.7)
+ text14.scale(2)
+ text11.set_color(GREEN)
+ text13.set_color(RED)
+ text10.move_to(1.5*DOWN+3*LEFT)
+ text11.move_to(1.5*DOWN+2.75*LEFT)
+ text13.move_to(1.5*DOWN+2.25*LEFT)
+ text14.move_to(1.5*DOWN+2*LEFT)
+
+ self.play(FadeIn(text10), Transform(x_cor,text11), Transform(y_cor,text13), FadeIn(text14))
+
+ text15 = TextMobject(r"$\left[\begin{array}{c} x\\y \end{array}\right]$")
+ text15.scale(0.7)
+ text15.set_color(PURPLE)
+ text15.move_to(1.5*DOWN+1.5*LEFT)
+
+ self.play(FadeIn(text15))
+ self.play(FadeOut(text3), FadeOut(text4), FadeOut(text5), FadeOut(text7), FadeOut(text6))
+
+ text1[0].scale(1.2)
+ self.play(ApplyMethod(text1[0].move_to,1.5*DOWN+4.5*LEFT), FadeOut(equal))
+ self.wait(2) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_Understand_Linear_Transformations_visually.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Understand_Linear_Transformations_visually.py
index 577032d..577032d 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_Understand_Linear_Transformations_visually.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Understand_Linear_Transformations_visually.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_Uniform_Scaling.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Uniform_Scaling.py
index a7856a5..a7856a5 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_Uniform_Scaling.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Uniform_Scaling.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear.py
index 91f098e..91f098e 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear_gif.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear_gif.gif
index 9bef1b6..9bef1b6 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear_gif.gif
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear_gif.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear.py
index 718e4e0..718e4e0 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear_gif.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear_gif.gif
index 7ca323f..7ca323f 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear_gif.gif
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear_gif.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_linear_transformation.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file8_linear_transformation.py
index 01a0cef..01a0cef 100755
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_linear_transformation.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file8_linear_transformation.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gif
new file mode 100644
index 0000000..017e0c7
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gif
Binary files differ