diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/directional-derivatives/Directional_Derivatives_Quiz.pdf b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/directional-derivatives/Directional_Derivatives_Quiz.pdf new file mode 100644 index 00000000..342dc804 Binary files /dev/null and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/directional-derivatives/Directional_Derivatives_Quiz.pdf differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/Multivariable_Functions_Quiz.pdf b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/Multivariable_Functions_Quiz.pdf index 7895843c..1155206e 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/Multivariable_Functions_Quiz.pdf and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/Multivariable_Functions_Quiz.pdf differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file1_multivar_func_examples.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file1_multivar_func_examples.py index 55b2b7eb..c15cdfb9 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file1_multivar_func_examples.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file1_multivar_func_examples.py @@ -17,45 +17,35 @@ def construct(self): rectangle_area[2].set_color(YELLOW_C) rectangle_area[4].set_color(BLUE_C) + + triangle = Polygon(np.array([-3,-1.5,0]), np.array([2,-1.5,0]), np.array([2,1.5,0]), np.array([-3,-1.5,0]), color = PURPLE) - square = Square(side_length = 5, color = PURPLE) - square_area_func = TexMobject("Area", "=", "f(", "Length", ")") - square_area_func[0].set_color(GREEN_C) - square_area_func[2].set_color(ORANGE) - square_area_func[3].set_color(BLUE_C) - square_area_func[4].set_color(ORANGE) - - square_area = TexMobject("Area", "=", "Length^2") - square_area[0].set_color(GREEN_C) - square_area[2].set_color(BLUE_C) - + triangle_area_func = TexMobject("Area", "=", "f(", "Base", ",", "Height", ")").scale(0.6).move_to(1*DOWN) + triangle_area_func[0].set_color(RED_C) + triangle_area_func[2].set_color(ORANGE) + triangle_area_func[3].set_color(YELLOW_C) + triangle_area_func[5].set_color(BLUE_C) + triangle_area_func[6].set_color(ORANGE) - circle = Circle(radius = 2, color = PINK) - circle_area_func = TexMobject("Area", "=", "f(", "r", ")") - circle_area_func[0].set_color(YELLOW_C) - circle_area_func[2].set_color(ORANGE) - circle_area_func[3].set_color(GREEN_C) - circle_area_func[4].set_color(ORANGE) + triangle_area = TexMobject("Area", "=", "\\frac{1}{2}", "\\times", "Base", "\\times", "Height").scale(0.6).move_to(1*DOWN) + triangle_area[0].set_color(RED_C) + triangle_area[2].set_color(GREEN_C) + triangle_area[4].set_color(YELLOW_C) + triangle_area[6].set_color(BLUE_C) - circle_area = TexMobject("Area", "=", "\\pi", "r^2") - circle_area[0].set_color(YELLOW_C) - circle_area[2].set_color(BLUE_C) - circle_area[3].set_color(GREEN_C) - - radius = Line(ORIGIN,2*RIGHT, color = RED_C) - braces_rect1 = Brace(rectangle, LEFT) eq_text1 = braces_rect1.get_text("Length").set_color(YELLOW_C) braces_rect2 = Brace(rectangle, UP) eq_text2 = braces_rect2.get_text("Breadth").set_color(BLUE_C) - - braces_square = Brace(square, LEFT) - braces_square_text = braces_square.get_text("Length").set_color(BLUE_C) - - radius_text = TexMobject("r", color = GREEN_C).next_to(radius,UP) + + braces_triangle_height = Brace(triangle, RIGHT) + braces_triangle_height_text = braces_triangle_height.get_text("Height").set_color(BLUE_C) + + braces_triangle_base = Brace(triangle, DOWN) + braces_triangle_base_text = braces_triangle_base.get_text("Base").set_color(YELLOW_C) self.play(ShowCreation(rectangle)) @@ -69,28 +59,19 @@ def construct(self): self.play(FadeOut(braces_rect1),FadeOut(eq_text1),FadeOut(braces_rect2),FadeOut(eq_text2),FadeOut(rectangle_area_func)) - self.play(Transform(rectangle, square)) - self.wait(1) - self.play(GrowFromCenter(braces_square),Write(braces_square_text)) + self.play(Transform(rectangle, triangle)) self.wait(1) - self.play(Write(square_area_func)) + self.play(GrowFromCenter(braces_triangle_height),Write(braces_triangle_height_text)) self.wait(1) - self.play(Transform(square_area_func, square_area)) + self.play(GrowFromCenter(braces_triangle_base),Write(braces_triangle_base_text)) self.wait(1) - self.play(FadeOut(braces_square),FadeOut(braces_square_text),FadeOut(square_area_func)) - - - self.play(Transform(rectangle, circle)) + self.play(Write(triangle_area_func)) self.wait(1) - self.play(ShowCreation(radius),Write(radius_text)) + self.play(Transform(triangle_area_func, triangle_area)) self.wait(1) - self.play(FadeOut(radius_text),FadeOut(radius)) + self.play(FadeOut(braces_triangle_height),FadeOut(braces_triangle_height_text),FadeOut(braces_triangle_base),FadeOut(braces_triangle_base_text),FadeOut(triangle_area_func)) self.wait(1) - self.play(Write(circle_area_func)) - self.wait(1) - self.play(Transform(circle_area_func, circle_area)) - self.wait(1) - self.play(FadeOut(circle_area_func)) + diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file2_multivariable_func_respresentation.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file2_multivariable_func_respresentation.py index d10ff0ac..e413e02f 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file2_multivariable_func_respresentation.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file2_multivariable_func_respresentation.py @@ -12,9 +12,6 @@ def construct(self): self.play(FadeOut(topic)) - #circle = Circle() - #circle.scale(3) - scalar_function = TextMobject("Scalar Valued Function") scalar_function.set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) scalar_function.scale(1.5) @@ -69,16 +66,10 @@ def construct(self): number2.set_color(ORANGE) output2 = TextMobject(r"$ \begin{bmatrix} 4 \\ 6 \end{bmatrix}$") - #output2.scale(1.5) output2.set_color(BLUE_C) output2.move_to(3*RIGHT) - #eqn2_1 = TextMobject(r"f(2,1,3) = $2^2(1) + 2(1)(3)$") - #eqn2_1.set_color(YELLOW) - - #eqn2_2 = TextMobject(r"f(2,1,3) = $2 + 6$") - #eqn2_2.set_color(YELLOW) - + self.play(Write(eqn2)) @@ -86,13 +77,72 @@ def construct(self): self.play(ApplyMethod(number2.move_to, 3*LEFT)) self.play(FadeOut(number2)) - #self.play(Transform(eqn2, eqn2_1)) - #self.wait(1) - #self.play(Transform(eqn2, eqn2_2)) - #self.wait(1) - self.play(ApplyMethod(output2.move_to, 2.5*DOWN+4*RIGHT)) self.wait() self.play(Write(vector_function)) self.play(FadeOut(output2),FadeOut(eqn2), FadeOut(vector_function), FadeOut(rectangle)) - self.wait() \ No newline at end of file + self.wait() + + + +class VectorValuedFunc(Scene): + def construct(self): + numberplane = NumberPlane() + + rectangle = Rectangle(height = 1, width = 2, color = PURPLE).move_to(2.5*UP+5*RIGHT) + + eqn = TextMobject(r"f(x,y) = $ \begin{bmatrix} xy \\ \frac{y}{x} \end{bmatrix}$").scale(0.6).move_to(2.5*UP+5*RIGHT).set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) + + dot1 = Dot().set_color(PINK).move_to(np.array([2,2,0])) + + number1 = TextMobject("(2,2)").scale(0.6).next_to(dot1, RIGHT).set_color(PINK) + + output1 = TextMobject(r"$ \begin{bmatrix} 4 \\ 1 \end{bmatrix}$").scale(0.6).set_color(YELLOW_C).move_to(2.5*UP+6.5*RIGHT) + + vector1 = Arrow(np.array([2,2,0]), np.array([4,1,0]), color = RED_C, buff = 0.01, tip_length = 0.25) + + dot2 = Dot().set_color(PINK).move_to(np.array([-1,2,0])) + + number2 = TextMobject("(-1,2)").scale(0.6).next_to(dot2, RIGHT).set_color(PINK) + + output2 = TextMobject(r"$ \begin{bmatrix} -2 \\ -2 \end{bmatrix}$").scale(0.6).set_color(YELLOW_C).move_to(2.5*UP+6.5*RIGHT) + + vector2 = Arrow(np.array([-1,2,0]), np.array([-2,-2,0]), color = RED_C, buff = 0.01, tip_length = 0.25) + + + vector_valued_function = TextMobject("Vector Valued Function").move_to(2.5*UP+3*LEFT).set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) + + + self.play(ShowCreation(numberplane)) + self.wait() + self.play(ShowCreation(rectangle), ShowCreation(eqn)) + self.wait() + self.play(ShowCreation(dot1), ShowCreation(number1)) + self.wait(0.5) + self.play(ApplyMethod(number1.move_to, 2.5*UP+ 3.5*RIGHT)) + self.wait(0.5) + self.play(FadeOut(number1)) + self.wait(0.5) + self.play(ShowCreation(output1)) + self.wait(0.5) + self.play(ShowCreation(vector1)) + self.wait(0.5) + self.play(ApplyMethod(output1.move_to, 1*UP+ 4.5*RIGHT)) + self.wait() + + + self.play(ShowCreation(dot2), ShowCreation(number2)) + self.wait(0.5) + self.play(ApplyMethod(number2.move_to, 2.5*UP+ 3.5*RIGHT)) + self.wait(0.5) + self.play(FadeOut(number2)) + self.wait(0.5) + self.play(ShowCreation(output2)) + self.wait(0.5) + self.play(ShowCreation(vector2)) + self.wait(0.5) + self.play(ApplyMethod(output2.move_to, 2*DOWN+ 2.5*LEFT)) + self.wait() + self.play(Write(vector_valued_function)) + self.wait(2) + diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file3_sphere.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file3_sphere.py index 86239ae1..fcbc4102 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file3_sphere.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file3_sphere.py @@ -4,28 +4,24 @@ class Sphere(ThreeDScene): def construct(self): axes = ThreeDAxes() # creates a 3D Axis - text3d = TextMobject(r"$f(x,y) \rightarrow Point(x,y,z)$") - text3d1 = TextMobject(r"$f(x,y) \rightarrow Point(x,y, \sqrt{r^2 - x^2 - y^2})$") - self.add_fixed_in_frame_mobjects(text3d) - text3d.scale(0.7) + text3d1 = TextMobject(r"$z = f(x,y) = \sqrt{r^2 - x^2 - y^2}$") + text3d1.scale(0.7) - text3d.to_corner(UL) + text3d1.to_corner(UL) - text3d.set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) + text3d1.set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) - self.play(Write(text3d)) + self.play(Write(text3d1)) self.wait(1) - self.play(Transform(text3d,text3d1)) self.add_fixed_in_frame_mobjects(text3d1) - self.play(FadeOut(text3d)) sphere = ParametricSurface( lambda u, v: np.array([ 2*np.sin(u)*np.cos(v), 2*np.sin(u)*np.sin(v), 2*np.cos(u) - ]),u_min=0,u_max=PI,v_min=0,v_max=2*PI,checkerboard_colors=[RED_D, RED_E], + ]),u_min=0,u_max=PI/2,v_min=0,v_max=2*PI,checkerboard_colors=[RED_D, RED_E], resolution=(15, 32)).scale(1) @@ -53,8 +49,8 @@ def construct(self): dot_x_y1 = Dot().scale(0.75).set_fill(RED_C).move_to(np.array([-1,1,0])) dot_x_y_z1 = Dot().scale(0.75).set_fill(RED_C).move_to(np.array([-1,1,1.414])) - dot_x_y_z_1 = Dot().scale(0.75).set_fill(RED_C).move_to(np.array([-1,1,-1.414])) - line1 = DashedLine(np.array([-1,1,-1.414]), np.array([-1,1,1.414]), color = YELLOW_C) + + line1 = DashedLine(np.array([-1,1,0]), np.array([-1,1,1.414]), color = YELLOW_C) point_x_y1 = TexMobject("(-1,1,0)").set_color(BLUE_C).move_to(np.array([-1.5,1.5,0])).scale(0.5) point_x_y_z1 = TexMobject("(-1,1,\\sqrt{r^2 - x^2 - y^2})").set_color(BLUE_C).move_to(np.array([-1.5,1.5,1.414])).scale(0.5) @@ -62,38 +58,32 @@ def construct(self): point_x_y_z1_3 = TexMobject("(-1,1,\\sqrt{4 - 1 - 1})").set_color(BLUE_C).move_to(np.array([-1.5,1.5,1.414])).scale(0.5) point_x_y_z1_4 = TexMobject("(-1,1,\\sqrt{2})").set_color(BLUE_C).move_to(np.array([-1.5,1.5,1.414])).scale(0.5) point_x_y_z1_5 = TexMobject("(-1,1,1.414)").set_color(BLUE_C).move_to(np.array([-1.5,1.5,1.414])).scale(0.5) - - point_x_y_z_1 = TexMobject("(-1,1,\\sqrt{r^2 - x^2 - y^2})").set_color(BLUE_C).move_to(np.array([-1.5,1.5,-1.414])).scale(0.5) - point_x_y_z_1_2 = TexMobject("(-1,1,\\sqrt{4 - x^2 - y^2})").set_color(BLUE_C).move_to(np.array([-1.5,1.5,-1.414])).scale(0.5) - point_x_y_z_1_3 = TexMobject("(-1,1,\\sqrt{4 - 1 - 1})").set_color(BLUE_C).move_to(np.array([-1.5,1.5,-1.414])).scale(0.5) - point_x_y_z_1_4 = TexMobject("(-1,1,\\sqrt{2})").set_color(BLUE_C).move_to(np.array([-1.5,1.5,-1.414])).scale(0.5) - point_x_y_z_1_5 = TexMobject("(-1,1,-1.414)").set_color(BLUE_C).move_to(np.array([-1.5,1.5,-1.414])).scale(0.5) - + self.play(ShowCreation(dot_x_y1)) self.add_fixed_orientation_mobjects(point_x_y1) - self.play(ShowCreation(dot_x_y_z1), ShowCreation(dot_x_y_z_1), ShowCreation(line1)) - self.add_fixed_orientation_mobjects(point_x_y_z1, point_x_y_z_1) + self.play(ShowCreation(dot_x_y_z1), ShowCreation(line1)) + self.add_fixed_orientation_mobjects(point_x_y_z1) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z1,point_x_y_z1_2), ReplacementTransform(point_x_y_z_1,point_x_y_z_1_2)) - self.add_fixed_orientation_mobjects(point_x_y_z1_2, point_x_y_z_1_2) + self.play(ReplacementTransform(point_x_y_z1,point_x_y_z1_2)) + self.add_fixed_orientation_mobjects(point_x_y_z1_2) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z1_2,point_x_y_z1_3), ReplacementTransform(point_x_y_z_1_2,point_x_y_z_1_3)) - self.add_fixed_orientation_mobjects(point_x_y_z1_3, point_x_y_z_1_3) + self.play(ReplacementTransform(point_x_y_z1_2,point_x_y_z1_3)) + self.add_fixed_orientation_mobjects(point_x_y_z1_3) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z1_3,point_x_y_z1_4), ReplacementTransform(point_x_y_z_1_3,point_x_y_z_1_4)) - self.add_fixed_orientation_mobjects(point_x_y_z1_4, point_x_y_z_1_4) + self.play(ReplacementTransform(point_x_y_z1_3,point_x_y_z1_4)) + self.add_fixed_orientation_mobjects(point_x_y_z1_4) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z1_4,point_x_y_z1_5), ReplacementTransform(point_x_y_z_1_4,point_x_y_z_1_5)) - self.add_fixed_orientation_mobjects(point_x_y_z1_5, point_x_y_z_1_5) + self.play(ReplacementTransform(point_x_y_z1_4,point_x_y_z1_5)) + self.add_fixed_orientation_mobjects(point_x_y_z1_5) dot_x_y2 = Dot().scale(0.75).set_fill(RED_C).move_to(np.array([0.5,-0.5,0])) dot_x_y_z2 = Dot().scale(0.75).set_fill(RED_C).move_to(np.array([0.5,-0.5,1.87])) - dot_x_y_z_2 = Dot().scale(0.75).set_fill(RED_C).move_to(np.array([0.5,-0.5,-1.87])) - line2 = DashedLine(np.array([0.5,-0.5,-1.87]), np.array([0.5,-0.5,1.87]), color = YELLOW_C) + + line2 = DashedLine(np.array([0.5,-0.5,0]), np.array([0.5,-0.5,1.87]), color = YELLOW_C) point_x_y2 = TexMobject("(0.5,-0.5,0)").set_color(BLUE_C).move_to(np.array([1.5,-1.5,0])).scale(0.5) point_x_y_z2 = TexMobject("(0.5,-0.5,\\sqrt{r^2 - x^2 - y^2})").set_color(BLUE_C).move_to(np.array([1.5,-1.5,1.87])).scale(0.5) @@ -101,41 +91,35 @@ def construct(self): point_x_y_z2_3 = TexMobject("(0.5,-0.5,\\sqrt{4 - 0.25 - 0.25})").set_color(BLUE_C).move_to(np.array([1.5,-1.5,1.87])).scale(0.5) point_x_y_z2_4 = TexMobject("(0.5,-0.5,\\sqrt{3.5})").set_color(BLUE_C).move_to(np.array([1.5,-1.5,1.87])).scale(0.5) point_x_y_z2_5 = TexMobject("(0.5,-0.5,1.87)").set_color(BLUE_C).move_to(np.array([1.5,-1.5,1.87])).scale(0.5) - - point_x_y_z_2 = TexMobject("(0.5,-0.5,\\sqrt{r^2 - x^2 - y^2})").set_color(BLUE_C).move_to(np.array([1.5,-1.5,-1.87])).scale(0.5) - point_x_y_z_2_2 = TexMobject("(0.5,-0.5,\\sqrt{4 - x^2 - y^2})").set_color(BLUE_C).move_to(np.array([1.5,-1.5,-1.87])).scale(0.5) - point_x_y_z_2_3 = TexMobject("(0.5,-0.5,\\sqrt{4 - 0.25 - 0.25})").set_color(BLUE_C).move_to(np.array([1.5,-1.5,-1.87])).scale(0.5) - point_x_y_z_2_4 = TexMobject("(0.5,-0.5,\\sqrt{3.5})").set_color(BLUE_C).move_to(np.array([1.5,-1.5,-1.87])).scale(0.5) - point_x_y_z_2_5 = TexMobject("(0.5,-0.5,-1.87)").set_color(BLUE_C).move_to(np.array([1.5,-1.5,-1.87])).scale(0.5) - + self.play(ShowCreation(dot_x_y2)) self.add_fixed_orientation_mobjects(point_x_y2) - self.play(ShowCreation(dot_x_y_z2), ShowCreation(dot_x_y_z_2), ShowCreation(line2)) - self.add_fixed_orientation_mobjects(point_x_y_z2, point_x_y_z_2) + self.play(ShowCreation(dot_x_y_z2), ShowCreation(line2)) + self.add_fixed_orientation_mobjects(point_x_y_z2) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z2,point_x_y_z2_2), ReplacementTransform(point_x_y_z_2,point_x_y_z_2_2)) - self.add_fixed_orientation_mobjects(point_x_y_z2_2, point_x_y_z_2_2) + self.play(ReplacementTransform(point_x_y_z2,point_x_y_z2_2)) + self.add_fixed_orientation_mobjects(point_x_y_z2_2) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z2_2,point_x_y_z2_3), ReplacementTransform(point_x_y_z_2_2,point_x_y_z_2_3)) - self.add_fixed_orientation_mobjects(point_x_y_z2_3, point_x_y_z_2_3) + self.play(ReplacementTransform(point_x_y_z2_2,point_x_y_z2_3)) + self.add_fixed_orientation_mobjects(point_x_y_z2_3) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z2_3,point_x_y_z2_4), ReplacementTransform(point_x_y_z_2_3,point_x_y_z_2_4)) - self.add_fixed_orientation_mobjects(point_x_y_z2_4, point_x_y_z_2_4) + self.play(ReplacementTransform(point_x_y_z2_3,point_x_y_z2_4)) + self.add_fixed_orientation_mobjects(point_x_y_z2_4) self.wait(0.5) - self.play(ReplacementTransform(point_x_y_z2_4,point_x_y_z2_5), ReplacementTransform(point_x_y_z_2_4,point_x_y_z_2_5)) - self.add_fixed_orientation_mobjects(point_x_y_z2_5, point_x_y_z_2_5) + self.play(ReplacementTransform(point_x_y_z2_4,point_x_y_z2_5)) + self.add_fixed_orientation_mobjects(point_x_y_z2_5) - self.play(FadeOut(point_x_y1), FadeOut(point_x_y_z1_5), FadeOut(point_x_y_z_1_5), FadeOut(dot_x_y1), FadeOut(dot_x_y_z1), FadeOut(dot_x_y_z_1), FadeOut(line1)) - self.play(FadeOut(point_x_y2), FadeOut(point_x_y_z2_5), FadeOut(point_x_y_z_2_5), FadeOut(dot_x_y2), FadeOut(dot_x_y_z2), FadeOut(dot_x_y_z_2), FadeOut(line2)) + self.play(FadeOut(point_x_y1), FadeOut(point_x_y_z1_5)) + self.play(FadeOut(point_x_y2), FadeOut(point_x_y_z2_5)) sphere_final = [] - for u in range(0, 180, 15): + for u in range(0, 90, 15): sphere_points1 = [np.array([2*np.sin(u*DEGREES)*np.cos(v*DEGREES), 2*np.sin(u*DEGREES)*np.sin(v*DEGREES), 2*np.cos(u*DEGREES)]) for v in range(0, 370, 10)] sphere_dots1 = [Dot().scale(0.75).set_fill(RED_C).move_to(pts) for pts in sphere_points1] @@ -158,20 +142,4 @@ def construct(self): self.begin_ambient_camera_rotation(rate=0.5) self.wait(3) self.play(ReplacementTransform(sphere_final_with_dots, sphere)) - self.wait(5) - - - - - - - - - - - - - - - - + self.wait(5) \ No newline at end of file diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file4_vectorvf_sine.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file4_vectorvf_sine.py index 06e225e8..3c5bb25c 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file4_vectorvf_sine.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file4_vectorvf_sine.py @@ -4,16 +4,14 @@ class SineVectors(GraphScene): CONFIG = { "x_min": 0, "x_max": 10, - "y_min": -1, - "y_max": 1, + "y_min": -5, + "y_max": 5, "graph_origin": ORIGIN+4*LEFT, - #"x_labeled_nums": list(range(-5, 6)), - #"y_labeled_nums": list(range(0, 5)), + "x_axis_width": 7, + "y_axis_height": 7, } def construct(self): - - XTD = self.x_axis_width/(self.x_max - self.x_min) @@ -21,17 +19,40 @@ def construct(self): self.setup_axes(animate = True) + sine = self.get_graph(lambda x : np.pi*np.sin(x), x_min = 0, x_max = 6.3, color = GREEN) + + + dot1 = Dot().rotate(PI/2).set_color(RED_C) + alpha1 = ValueTracker(0) + vector1 = self.get_vector(alpha1.get_value(),sine) + dot1.add_updater(lambda m: m.move_to(vector1.get_end())) + self.play( + ShowCreation(sine), + GrowFromCenter(dot1), + GrowArrow(vector1) + ) + vector1.add_updater( + lambda m: m.become( + self.get_vector(alpha1.get_value()%1,sine) + ) + ) + self.add(vector1,dot1) + self.play(alpha1.increment_value, 1, run_time=5, rate_func=linear) + + + self.play(FadeOut(vector1), FadeOut(dot1), FadeOut(sine)) + + self.wait() + - sine1 = self.get_graph(lambda x : np.sin(x), x_min = 0, x_max = 1.575, color = GREEN) + sine1 = self.get_graph(lambda x : np.pi*np.sin(x), x_min = 0, x_max = 1.575, color = GREEN_C) - point1 = Dot().shift(self.graph_origin+1*YTD*UP + 1.575*XTD*RIGHT) - point1_lab = TextMobject(r"$t = (\frac{\pi}{2})$") - point1_lab.scale(0.7) - point1_lab.next_to(point1, UP) + point1 = Dot().shift(self.graph_origin+np.pi*YTD*UP + 1.575*XTD*RIGHT) + point1_lab = TextMobject(r"$t = (\frac{\pi}{2})$", color = GREY).scale(0.6).next_to(point1, 0.5*UP) - vector1 = Arrow(self.graph_origin, self.graph_origin+1*YTD*UP + 1.575*XTD*RIGHT, buff=0.1, color = RED) - vector1_lab = TextMobject(r"$r(\frac{\pi}{2})$", color = RED) - vector1_lab.move_to(self.graph_origin+1.5*XTD*RIGHT+ 0.5*YTD*UP) + + vector1 = Arrow(self.graph_origin, self.graph_origin+np.pi*YTD*UP + 1.575*XTD*RIGHT, buff=0, color = RED_C, tip_length = 0.25) + vector1_lab = TextMobject(r"$r(\frac{\pi}{2})$", color = RED).scale(0.7).move_to(self.graph_origin+1.5*XTD*RIGHT+ 1.5*YTD*UP) self.play(GrowArrow(vector1),Write(vector1_lab)) self.play(ShowCreation(point1), Write(point1_lab)) @@ -39,16 +60,13 @@ def construct(self): self.wait(1) - sine2 = self.get_graph(lambda x : np.sin(x), x_min = 1.575, x_max = 3.15, color = GREEN) + sine2 = self.get_graph(lambda x : np.pi*np.sin(x), x_min = 1.575, x_max = 3.15, color = GREEN_C) point2 = Dot().shift(self.graph_origin+3.15*XTD*RIGHT) - point2_lab = TextMobject(r"$t = (\pi)$") - point2_lab.scale(0.7) - point2_lab.next_to(point2, UP+RIGHT) + point2_lab = TextMobject(r"$t = (\pi)$", color = GREY).scale(0.6).next_to(point2, 0.5*UP+0.5*RIGHT) - vector2 = Arrow(self.graph_origin, self.graph_origin+3.15*XTD*RIGHT, buff=0.1, color = BLUE) - vector2_lab = TextMobject(r"$r(\pi)$", color = BLUE) - vector2_lab.move_to(self.graph_origin+1.5*XTD*RIGHT+ 0.15*YTD*UP) + vector2 = Arrow(self.graph_origin, self.graph_origin+3.15*XTD*RIGHT, buff=0, color = BLUE, tip_length = 0.25) + vector2_lab = TextMobject(r"$r(\pi)$", color = BLUE).scale(0.7).move_to(self.graph_origin+1.5*XTD*RIGHT+ 0.4*YTD*UP) self.play(GrowArrow(vector2),Write(vector2_lab)) self.play(ShowCreation(point2), Write(point2_lab)) @@ -56,16 +74,13 @@ def construct(self): self.wait(1) - sine3 = self.get_graph(lambda x : np.sin(x), x_min = 3.15, x_max = 4.725, color = GREEN) + sine3 = self.get_graph(lambda x : np.pi*np.sin(x), x_min = 3.15, x_max = 4.725, color = GREEN_C) - point3 = Dot().shift(self.graph_origin+1*YTD*DOWN + 4.725*XTD*RIGHT) - point3_lab = TextMobject(r"$t = (\frac{3\pi}{2})$") - point3_lab.scale(0.7) - point3_lab.next_to(point3, DOWN) + point3 = Dot().shift(self.graph_origin+np.pi*YTD*DOWN + 4.725*XTD*RIGHT) + point3_lab = TextMobject(r"$t = (\frac{3\pi}{2})$", color = GREY).scale(0.6).next_to(point3, 0.5*DOWN) - vector3 = Arrow(self.graph_origin, self.graph_origin+1*YTD*DOWN + 4.725*XTD*RIGHT, buff=0.1, color = YELLOW_C) - vector3_lab = TextMobject(r"$r(\frac{3\pi}{2})$", color = YELLOW_C) - vector3_lab.move_to(self.graph_origin+2*XTD*RIGHT+ 0.7*YTD*DOWN) + vector3 = Arrow(self.graph_origin, self.graph_origin+np.pi*YTD*DOWN + 4.725*XTD*RIGHT, buff=0, color = YELLOW_C, tip_length = 0.25) + vector3_lab = TextMobject(r"$r(\frac{3\pi}{2})$", color = YELLOW_C).scale(0.7).move_to(self.graph_origin+2.5*XTD*RIGHT+ 1*YTD*DOWN) self.play(GrowArrow(vector3),Write(vector3_lab)) self.play(ShowCreation(point3), Write(point3_lab)) @@ -73,19 +88,27 @@ def construct(self): self.wait(1) - sine4 = self.get_graph(lambda x : np.sin(x), x_min = 4.725, x_max = 6.3, color = GREEN) + sine4 = self.get_graph(lambda x : np.pi*np.sin(x), x_min = 4.725, x_max = 6.3, color = GREEN_C) point4 = Dot().shift(self.graph_origin+6.3*XTD*RIGHT) - point4_lab = TextMobject(r"$t = (2\pi)$") - point4_lab.scale(0.7) - point4_lab.next_to(point4, UP+RIGHT) + point4_lab = TextMobject(r"$t = (2\pi)$", color = GREY).scale(0.6).next_to(point4, 0.5*UP+0.5*RIGHT) - vector4 = Arrow(self.graph_origin, self.graph_origin+6.3*XTD*RIGHT, buff=0.1, color = PURPLE) - vector4_lab = TextMobject(r"$r(2\pi)$", color = PURPLE) - vector4_lab.move_to(self.graph_origin+4.5*XTD*RIGHT+ 0.15*YTD*DOWN) + vector4 = Arrow(self.graph_origin, self.graph_origin+6.3*XTD*RIGHT, buff=0, color = PURPLE, tip_length = 0.25) + vector4_lab = TextMobject(r"$r(2\pi)$", color = PURPLE).scale(0.7).move_to(self.graph_origin+4.5*XTD*RIGHT+ 0.4*YTD*DOWN) self.play(GrowArrow(vector4),Write(vector4_lab)) self.play(ShowCreation(point4), Write(point4_lab)) self.play(ShowCreation(sine4)) self.wait(3) + self.play(FadeOut(sine1), FadeOut(point1), FadeOut(point1_lab), FadeOut(vector1), FadeOut(vector1_lab), + FadeOut(sine2), FadeOut(point2), FadeOut(point2_lab), FadeOut(vector2), FadeOut(vector2_lab), + FadeOut(sine3), FadeOut(point3), FadeOut(point3_lab), FadeOut(vector3), FadeOut(vector3_lab), + FadeOut(sine4), FadeOut(point4), FadeOut(point4_lab), FadeOut(vector4), FadeOut(vector4_lab)) + + + + def get_vector(self, proportion, curve): + vector = Arrow(np.array([-4,0,0]), curve.point_from_proportion(proportion), color = ORANGE, buff=0, tip_length = 0.25) + return vector + diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file5_vectorvf_helix.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file5_vectorvf_helix.py index fc151ac6..c02f5405 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file5_vectorvf_helix.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/file5_vectorvf_helix.py @@ -20,7 +20,9 @@ def construct(self): ]),color=GREEN_C,t_min=-TAU,t_max=TAU, ) - function = TexMobject("f(", "r", ",", "\\theta", ")", "=", "[", "r", "\\cos", "\\theta", ",", "r", "\\sin" ,"\\theta", ",", "h" ,"\\theta", "]" ).scale(0.6).to_corner(UL) + + function = TexMobject("f(", "r", ",", "\\theta", ")", "=", "{ \\begin{bmatrix} r \\cos\\theta \\\ r \\sin \\theta \\\ h \\theta \\end{bmatrix}}" ).scale(0.6).to_corner(UL) + function.set_color_by_tex(r"\theta", BLUE_C) function.set_color_by_tex(r"r", RED_C) function.set_color_by_tex(r"\cos", GREEN_C) @@ -28,8 +30,13 @@ def construct(self): function[0].set_color(ORANGE) function[4].set_color(ORANGE) + + + slope_text = TextMobject(r"$\theta = $").move_to(3*UP+3*RIGHT) + number = DecimalNumber(0,unit=r" rad", color=RED_C).next_to(slope_text, RIGHT) + - self.add_fixed_in_frame_mobjects(function) + self.add_fixed_in_frame_mobjects(function,slope_text, number) self.set_camera_orientation(phi=60*DEGREES, theta = 45*DEGREES) @@ -49,41 +56,41 @@ def construct(self): alpha1 = ValueTracker(0) vector1 = self.get_vector(alpha1.get_value(),helix1) dot1.add_updater(lambda m: m.move_to(vector1.get_end())) + number.add_updater(lambda m: m.set_value(alpha1.get_value()*4*np.pi)) + number.add_updater(lambda m: self.add_fixed_in_frame_mobjects(m)) + + self.play( ShowCreation(helix1), GrowFromCenter(dot1), GrowArrow(vector1) + ) + vector1.add_updater( lambda m: m.become( self.get_vector(alpha1.get_value()%1,helix1) ) ) + + + self.add(vector1,dot1) + + self.play(alpha1.increment_value, 1, run_time=10, rate_func=linear) - self.play(FadeOut(vector1), FadeOut(dot1)) - self.play(ReplacementTransform(helix1, helix2)) + self.play(FadeOut(vector1), FadeOut(dot1), FadeOut(number)) + self.move_camera(phi=0* DEGREES,theta=90*DEGREES) - dot2 = Dot().rotate(PI/2).set_color(RED_C) - alpha2 = ValueTracker(0) - vector2 = self.get_vector(alpha2.get_value(),helix2) - dot2.add_updater(lambda m: m.move_to(vector2.get_end())) - self.play( - ShowCreation(helix2), - GrowFromCenter(dot2), - GrowArrow(vector2) - ) - vector2.add_updater( - lambda m: m.become( - self.get_vector(alpha2.get_value()%1,helix2) - ) - ) - self.add(vector2,dot2) - self.play(alpha2.increment_value, 1, run_time=10, rate_func=linear) - self.wait() + alpha1 = ValueTracker(0) + + self.add(vector1,dot1) + + + self.play(alpha1.increment_value, 1, run_time=10, rate_func=linear) diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file1_multivar_func_examples.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file1_multivar_func_examples.gif index 43c3a429..d078fb9c 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file1_multivar_func_examples.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file1_multivar_func_examples.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file2_multivariable_func_respresentation.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file2_multivariable_func_respresentation.gif index 8c4506c2..83faaa6c 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file2_multivariable_func_respresentation.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file2_multivariable_func_respresentation.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file3_sphere.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file3_sphere.gif index 3e35ec89..86fa8fee 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file3_sphere.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file3_sphere.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file4_vectorvf_sine.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file4_vectorvf_sine.gif index 215459ea..b6a266fb 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file4_vectorvf_sine.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file4_vectorvf_sine.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file5_vectorvf_helix.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file5_vectorvf_helix.gif index c3d37f68..bee019ca 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file5_vectorvf_helix.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-functions/gifs/file5_vectorvf_helix.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/file1_epsilon_delta_defn.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/file1_epsilon_delta_defn.py index 803c1225..052b1eb7 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/file1_epsilon_delta_defn.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/file1_epsilon_delta_defn.py @@ -2,8 +2,7 @@ class EpsilonDelta(ThreeDScene): def construct(self): - axes = ThreeDAxes() # creates a 3D Axis - + axes = ThreeDAxes() sphere = ParametricSurface( lambda u, v: np.array([ @@ -12,46 +11,85 @@ def construct(self): 3*np.cos(u) ]),u_min=0,u_max=PI/4,v_min=PI/2,v_max=PI,checkerboard_colors=[RED_D, RED_E], resolution=(15, 32)).scale(1) + + delta_circle_boundary = Circle(radius= 0.3, color = GREEN_E).shift(1*LEFT+1*UP) + + circle = [np.array([0.3*np.cos(i*DEGREES)-1, 0.3*np.sin(i*DEGREES)+1, 0]) for i in range(361)] + + circle_above = [np.array([0.3*np.cos(i*DEGREES)-1, 0.3*np.sin(i*DEGREES)+1, np.sqrt(9 - (0.3*np.cos(i*DEGREES)-1)**2 - (0.3*np.sin(i*DEGREES)+1)**2)]) for i in range(361)] + + delta_circle = Polygon(*circle, color = BLACK, fill_color = GREEN_E, fill_opacity= 0.5, stroke_width=0.1) + + delta_circle_above = Polygon(*circle_above, color = BLACK, fill_color = GREEN_E, fill_opacity= 0.5, stroke_width=0.1) + + dot_circle = Dot().scale(0.6).move_to(np.array([-1,1,0])).set_fill(PINK) + dot_surface = Dot().rotate(-PI/3).scale(0.7).move_to(np.array([-1.2,1.2,2.7])).set_fill(PINK) - cylinder_z = ParametricSurface( - lambda u, v: np.array([ - 0.25*np.cos(TAU * v), - 1.8* (1 - u), - 0.25*np.sin(TAU * v) - - ]), - checkerboard_colors=[YELLOW_C, YELLOW_E], resolution=(6, 32)).fade(0.2).rotate(PI/4).move_to(np.array([-0.65,0.65,2.54])) - cylinder_x = ParametricSurface( - lambda u, v: np.array([ - 0.3*np.cos(TAU * v)-1, - 0.3*np.sin(TAU * v)+1, - 2.6*(1 - u) - ]), - checkerboard_colors=[BLUE_C, BLUE_E], resolution=(6, 32)).fade(0.2) + #Creating cylinder + ###### + ''' + cylinder = [] + cylinder.append(np.array([-0.7, 1, 0])) + cylinder.append(np.array([-0.7, 1, np.sqrt(9 - (0.7)**2 - 1)])) + + + #circle_above_reverse = [ele for ele in reversed(circle_above)] + circle_above_reverse = [np.array([0.3*np.cos(i*DEGREES)-1, 0.3*np.sin(i*DEGREES)+1, np.sqrt(9 - (0.3*np.cos(i*DEGREES)-1)**2 - (0.3*np.sin(i*DEGREES)+1)**2)]) for i in range(181)] + cylinder = cylinder + circle_above_reverse - delta_circle = Circle(radius= 0.3, color = BLACK).shift(1*LEFT+1*UP).set_fill(GREEN_E, opacity = 0.5) + #cylinder.append(np.array([-0.7, 1, np.sqrt(9 - (0.7)**2 - 1)])) + cylinder.append(np.array([0.3*np.cos(180)-1, 0.3*np.sin(180)+1, np.sqrt(9 - (0.3*np.cos(180)-1)**2 - (0.3*np.sin(180)+1)**2)])) + #cylinder.append(np.array([-0.7, 1, 0])) + cylinder.append(np.array([0.3*np.cos(180)-1, 0.3*np.sin(180)+1, 0])) - epsilon_circle = [np.array([0.25*np.cos(i*DEGREES),0,0.25*np.sin(i*DEGREES)]) for i in range(361)] + + cylinder = cylinder + [np.array([0.3*np.cos(i*DEGREES)-1, 0.3*np.sin(i*DEGREES)+1, 0]) for i in range(180,-1,-1)] + #y_x_2.append(np.array([-3, 9, 0])) + #cylinder.append(np.array([-0.7, 1, 0])) - epsilon_circle_polygon = Polygon(*epsilon_circle, color = RED_E, fill_color = RED_E, fill_opacity = 0.5).rotate(PI/4).move_to(np.array([0,0,2.54])) + cylinder_plane = Polygon(*cylinder, color = BLACK, fill_color = YELLOW_C, fill_opacity= 0.3, stroke_width=0.1) + #plane_y_x_2_text = TextMobject(r"$y = x^2$", color = RED_C).move_to(np.array([5,0,2])) + + #cylinder_plane2 = cylinder_plane.copy().rotate(2*PI) + cylinder = [] + cylinder.append(np.array([-0.7, 1, 0])) + cylinder.append(np.array([-0.7, 1, np.sqrt(9 - (0.7)**2 - 1)])) + - dot_circle = Dot().move_to(np.array([-1,1,0])).set_fill("#000080") + #circle_above_reverse = [ele for ele in reversed(circle_above)] + circle_above_reverse = [np.array([0.3*np.cos(i*DEGREES)-1, 0.3*np.sin(i*DEGREES)+1, np.sqrt(9 - (0.3*np.cos(i*DEGREES)-1)**2 - (0.3*np.sin(i*DEGREES)+1)**2)]) for i in range(360, 179, -1)] - dot_surface = Dot().rotate(-PI/4).scale(1.5).move_to(np.array([-1.2,1.2,2.7])).set_fill("#000080") + cylinder = cylinder + circle_above_reverse - dot_L_epsilon1 = Polygon(*[np.array([0.05*np.cos(i*DEGREES),0,0.05*np.sin(i*DEGREES)]) for i in range(361)], color = "#000080", fill_color = "#000080", fill_opacity = 1).rotate(PI/4).move_to(np.array([0,0,2.3])) + #cylinder.append(np.array([-0.7, 1, np.sqrt(9 - (0.7)**2 - 1)])) + cylinder.append(np.array([0.3*np.cos(180)-1, 0.3*np.sin(180)+1, np.sqrt(9 - (0.3*np.cos(180)-1)**2 - (0.3*np.sin(180)+1)**2)])) + #cylinder.append(np.array([-0.7, 1, 0])) + cylinder.append(np.array([0.3*np.cos(180)-1, 0.3*np.sin(180)+1, 0])) - dot_L_epsilon2 = Polygon(*[np.array([0.05*np.cos(i*DEGREES),0,0.05*np.sin(i*DEGREES)]) for i in range(361)], color = "#000080", fill_color = "#000080", fill_opacity = 1).rotate(PI/4).move_to(np.array([0,0,2.8])) - dot_L = Polygon(*[np.array([0.05*np.cos(i*DEGREES),0,0.05*np.sin(i*DEGREES)]) for i in range(361)], color = "#006400", fill_color = "#006400", fill_opacity = 1).rotate(PI/4).move_to(np.array([0,0,2.54])) + cylinder = cylinder + [np.array([0.3*np.cos(i*DEGREES)-1, 0.3*np.sin(i*DEGREES)+1, 0]) for i in range(180,360)] + #y_x_2.append(np.array([-3, 9, 0])) + #cylinder.append(np.array([-0.7, 1, 0])) + cylinder_plane = Polygon(*cylinder, color = BLACK, fill_color = YELLOW_C, fill_opacity= 0.3, stroke_width=0.1) - + ###### + ''' + + + lines = [Line(circle[i], circle_above[i], color = BLUE_B, opacity=0.01, stroke_width=0.1) for i in range(0,len(circle),1)] + lines_group = VGroup(*lines) + + line_epsilon_first = DashedLine(np.array([-1, 1, 0]), np.array([-1, 1, np.sqrt(7)]), color = YELLOW_C) + + + + self.add(axes) axis = TextMobject(r"X",r"Y",r"Z") @@ -63,117 +101,235 @@ def construct(self): self.add_fixed_orientation_mobjects(axis[0]) self.add_fixed_orientation_mobjects(axis[1]) - self.set_camera_orientation(phi=75*DEGREES,theta=135*DEGREES) - #self.set_camera_orientation(phi=80*DEGREES,theta=45*DEGREES) + self.set_camera_orientation(distance=200,phi=70*DEGREES,theta=135*DEGREES) + + self.play(ShowCreation(sphere)) + self.wait() + + text1 = TexMobject("\\sqrt{(x-a)^2+(y-b)^2}", color = GREEN_E).scale(0.7).to_corner(UR) + + self.play(ShowCreation(delta_circle_boundary), ShowCreation(dot_circle)) + self.add_fixed_in_frame_mobjects(text1) + self.wait(2) + + text2 = TexMobject("\\sqrt{(x-a)^2+(y-b)^2}", "<", "\\delta ", color = GREEN_E).scale(0.7).to_corner(UR) + text2[1].set_color(YELLOW_C) + text2[2].set_color(ORANGE) + self.play(FadeOut(text1), FadeOut(delta_circle_boundary), ShowCreation(delta_circle)) + self.bring_to_front(dot_circle) + self.add_fixed_in_frame_mobjects(text2) - self.play(ShowCreation(sphere),ShowCreation(delta_circle), ShowCreation(dot_circle)) + #self.play(ShowCreation(sphere), ShowCreation(delta_circle), ShowCreation(delta_circle_above)) - temp_circle_center = TextMobject(r"$(a,b,0)$").scale(0.6).set_color(BLUE_C).move_to(1.7*LEFT+1.1*UP) + temp_circle_center = TextMobject(r"$(a,b,0)$").scale(0.6).set_color(PINK).move_to(1.7*LEFT+1.1*UP) self.add_fixed_orientation_mobjects(temp_circle_center) self.wait() - delta_lab = TextMobject(r"$\delta$", r"$-$", "disk").scale(0.5).move_to(0.6*LEFT+1.7*UP) - delta_lab[0].set_color(PINK).scale(1.3) - delta_lab[1].set_color(ORANGE) - delta_lab[2].set_color(GREEN_E) + delta_lab = TextMobject(r"$\delta$", "disk").scale(0.5).move_to(0.6*LEFT+1.7*UP) + delta_lab[0].set_color(ORANGE).scale(1.3) + delta_lab[1].set_color(GREEN_E) self.add_fixed_orientation_mobjects(delta_lab) - self.play(ShowCreation(dot_surface)) - - temp_curve_circle_center = TextMobject(r"$(a,b,L)$").scale(0.6).set_color("#006400").move_to(np.array([-2,1,2.7])) + self.play(ShowCreation(lines_group), ShowCreation(line_epsilon_first)) + self.bring_to_front(delta_circle_above, dot_surface) + temp_curve_circle_center = TextMobject(r"$(a,b,L)$").scale(0.6).set_color(PINK).move_to(np.array([-1.7,1.1,2.7])) self.add_fixed_orientation_mobjects(temp_curve_circle_center) - - self.wait() - self.play(ShowCreation(cylinder_x), FadeOut(dot_surface)) - self.wait() + self.move_camera(distance = 5, phi=50*DEGREES,theta=135*DEGREES) + self.wait(3) - self.move_camera(phi=0* DEGREES,theta=135*DEGREES) + + self.play(FadeOut(dot_surface)) + + self.move_camera(distance=200,phi=0* DEGREES,theta=135*DEGREES) self.wait() - self.move_camera(phi=80* DEGREES,theta=225*DEGREES) + self.move_camera(distance=10,phi=80* DEGREES,theta=225*DEGREES) self.wait() - self.play(FadeOut(delta_lab), ShowCreation(cylinder_z)) + self.play(FadeOut(delta_lab), FadeOut(temp_circle_center), FadeOut(temp_curve_circle_center), FadeOut(text2)) self.wait() - self.play(FadeOut(temp_circle_center), FadeOut(temp_curve_circle_center),ShowCreation(epsilon_circle_polygon)) - self.move_camera(phi=80* DEGREES,theta=325*DEGREES) + line_epsilon1 = DashedLine(np.array([0.3*np.cos(315*DEGREES)-1, 0.3*np.sin(315*DEGREES)+1, np.sqrt(9 - (0.3*np.cos(315*DEGREES)-1)**2 - (0.3*np.sin(315*DEGREES)+1)**2)]), + np.array([0, 0, np.sqrt(9 - (0.3*np.cos(315*DEGREES)-1)**2 - (0.3*np.sin(315*DEGREES)+1)**2)]), color = YELLOW_C) - dot_L_epsilon1_lab = TextMobject(r"$L$", r"$-$", r"$\epsilon$").scale(0.6).move_to(np.array([-0.4,-0.4,2.3])) + line_epsilon2 = DashedLine(np.array([0.3*np.cos(135*DEGREES)-1, 0.3*np.sin(135*DEGREES)+1, np.sqrt(9 - (0.3*np.cos(135*DEGREES)-1)**2 - (0.3*np.sin(135*DEGREES)+1)**2)]), + np.array([0, 0, np.sqrt(9 - (0.3*np.cos(135*DEGREES)-1)**2 - (0.3*np.sin(135*DEGREES)+1)**2)]), color = YELLOW_C) + + line_epsilon = DashedLine(np.array([-1, +1, np.sqrt(7)]), np.array([0, 0, np.sqrt(7)]), color = YELLOW_C) + + + self.play(ShowCreation(line_epsilon1), ShowCreation(line_epsilon2), ShowCreation(line_epsilon)) + self.wait() + + self.move_camera(distance=5,phi=75* DEGREES,theta=325*DEGREES) + + + + dot_L_epsilon1 = Polygon(*[np.array([0.05*np.cos(i*DEGREES),0,0.05*np.sin(i*DEGREES)]) for i in range(361)], color = "#000080", fill_color = "#000080", fill_opacity = 1).rotate(PI/4).move_to(np.array([0,0,np.sqrt(9 - (0.3*np.cos(315*DEGREES)-1)**2 - (0.3*np.sin(315*DEGREES)+1)**2)])) + + dot_L_epsilon2 = Polygon(*[np.array([0.05*np.cos(i*DEGREES),0,0.05*np.sin(i*DEGREES)]) for i in range(361)], color = "#000080", fill_color = "#000080", fill_opacity = 1).rotate(PI/4).move_to(np.array([0,0,np.sqrt(9 - (0.3*np.cos(135*DEGREES)-1)**2 - (0.3*np.sin(135*DEGREES)+1)**2)])) + + dot_L = Polygon(*[np.array([0.05*np.cos(i*DEGREES),0,0.05*np.sin(i*DEGREES)]) for i in range(361)], color = "#006400", fill_color = "#006400", fill_opacity = 1).rotate(PI/4).move_to(np.array([0,0,np.sqrt(7)])) + + dot_L_epsilon1_lab = TextMobject(r"$L$", r"$-$", r"$\epsilon$").scale(0.6).move_to(np.array([-0.4,-0.4,np.sqrt(9 - (0.3*np.cos(315*DEGREES)-1)**2 - (0.3*np.sin(315*DEGREES)+1)**2)])) dot_L_epsilon1_lab[0].set_color("#D4108A") dot_L_epsilon1_lab[1].set_color("#006400") dot_L_epsilon1_lab[2].set_color("#4DC8A1").scale(1.5) - dot_L_epsilon2_lab = TextMobject(r"$L$", r"$+$", r"$\epsilon$").scale(0.6).move_to(np.array([-0.4,-0.4,2.8])) + dot_L_epsilon2_lab = TextMobject(r"$L$", r"$+$", r"$\epsilon$").scale(0.6).move_to(np.array([-0.4,-0.4,np.sqrt(9 - (0.3*np.cos(135*DEGREES)-1)**2 - (0.3*np.sin(135*DEGREES)+1)**2)])) dot_L_epsilon2_lab[0].set_color("#D4108A") dot_L_epsilon2_lab[1].set_color("#006400") dot_L_epsilon2_lab[2].set_color("#4DC8A1").scale(1.5) - dot_L_lab = TextMobject(r"$L$").scale(0.6).set_color("#D4108A").move_to(np.array([-0.4,-0.4,2.54])) + dot_L_lab = TextMobject(r"$L$").scale(0.6).set_color("#D4108A").move_to(np.array([-0.4,-0.4,np.sqrt(7)])) + + epsilon_line = Line(np.array([0,0,np.sqrt(9 - (0.3*np.cos(315*DEGREES)-1)**2 - (0.3*np.sin(315*DEGREES)+1)**2)]), np.array([0,0,np.sqrt(9 - (0.3*np.cos(135*DEGREES)-1)**2 - (0.3*np.sin(135*DEGREES)+1)**2)]), color = "#4DC8A1") + delta_line = Line(np.array([-1,1,0]), np.array([0.3*np.cos(0*DEGREES)-1, 0.3*np.sin(0*DEGREES)+1, 0]), color = "#000080") + delta_line_lab = TexMobject("\\delta", color = ORANGE).scale(0.6).move_to(delta_line.get_center()) - self.play(ShowCreation(dot_L_epsilon1), ShowCreation(dot_L), ShowCreation(dot_L_epsilon2)) - self.add_fixed_orientation_mobjects(dot_L_epsilon1_lab, dot_L_epsilon2_lab, dot_L_lab) - self.wait(4) + self.play(ShowCreation(epsilon_line), ShowCreation(delta_line), ShowCreation(dot_L_epsilon1), ShowCreation(dot_L), ShowCreation(dot_L_epsilon2)) + self.bring_to_front(dot_L_epsilon1, dot_L, dot_L_epsilon2) + self.add_fixed_orientation_mobjects(delta_line_lab, dot_L_epsilon1_lab, dot_L_epsilon2_lab, dot_L_lab) - self.move_camera(phi=80* DEGREES,theta=45*DEGREES) self.wait(2) - + circle_1 = [np.array([0.6*np.cos(i*DEGREES)-1, 0.6*np.sin(i*DEGREES)+1, 0]) for i in range(361)] + + circle_above_1 = [np.array([0.6*np.cos(i*DEGREES)-1, 0.6*np.sin(i*DEGREES)+1, np.sqrt(9 - (0.6*np.cos(i*DEGREES)-1)**2 - (0.6*np.sin(i*DEGREES)+1)**2)]) for i in range(361)] + + delta_circle_1 = Polygon(*circle_1, color = BLACK, fill_color = GREEN_E, fill_opacity= 0.5, stroke_width=0.1) + + delta_circle_above_1 = Polygon(*circle_above_1, color = BLACK, fill_color = GREEN_E, fill_opacity= 0.5, stroke_width=0.1) + + lines_1 = [Line(circle_1[i], circle_above_1[i], color = BLUE_B, opacity=0.01, stroke_width=0.1) for i in range(0,len(circle_1),1)] + lines_group_1 = VGroup(*lines_1) - + line_epsilon1_1 = DashedLine(np.array([0.6*np.cos(315*DEGREES)-1, 0.6*np.sin(315*DEGREES)+1, np.sqrt(9 - (0.6*np.cos(315*DEGREES)-1)**2 - (0.6*np.sin(315*DEGREES)+1)**2)]), + np.array([0, 0, np.sqrt(9 - (0.6*np.cos(315*DEGREES)-1)**2 - (0.6*np.sin(315*DEGREES)+1)**2)]), color = YELLOW_C) + + line_epsilon2_1 = DashedLine(np.array([0.6*np.cos(135*DEGREES)-1, 0.6*np.sin(135*DEGREES)+1, np.sqrt(9 - (0.6*np.cos(135*DEGREES)-1)**2 - (0.6*np.sin(135*DEGREES)+1)**2)]), + np.array([0, 0, np.sqrt(9 - (0.6*np.cos(135*DEGREES)-1)**2 - (0.6*np.sin(135*DEGREES)+1)**2)]), color = YELLOW_C) + + + epsilon_line_1 = Line(np.array([0,0,np.sqrt(9 - (0.6*np.cos(315*DEGREES)-1)**2 - (0.6*np.sin(315*DEGREES)+1)**2)]), np.array([0,0,np.sqrt(9 - (0.6*np.cos(135*DEGREES)-1)**2 - (0.6*np.sin(135*DEGREES)+1)**2)]), color = "#4DC8A1") + delta_line1 = Line(np.array([-1,1,0]), np.array([0.6*np.cos(0*DEGREES)-1, 0.6*np.sin(0*DEGREES)+1, 0]), color = "#000080") + delta_line_lab1 = TexMobject("\\delta", color = ORANGE).scale(0.6).move_to(delta_line1.get_center()) + + + + + epsilon_text1 = TextMobject(r"For every", r"$\epsilon$", " ,", color = YELLOW_C).scale(0.7).move_to(4.2*RIGHT+3.2*UP) + epsilon_text1[1].set_color("#4DC8A1") + + epsilon_text2 = TextMobject("there exists a corresponding", r"$\delta$", r"disk", color = YELLOW_C).scale(0.7) + epsilon_text2[1].set_color(ORANGE) + epsilon_text2.next_to(epsilon_text1, DOWN) + epsilon_text3 = TextMobject(r"So that for every value", color = YELLOW_C).scale(0.7).move_to(4*RIGHT+3.2*UP) - + epsilon_text4 = TextMobject("that lies within the", r"$\delta$", r"disk,", color = YELLOW_C).scale(0.7).next_to(epsilon_text3, DOWN) + epsilon_text4[1].set_color(ORANGE) + epsilon_text5 = TextMobject(r"the limit lies within the", r"$\epsilon$", r"band", color = YELLOW_C).scale(0.7) + epsilon_text5[1].set_color("#4DC8A1") + epsilon_text5.next_to(epsilon_text4, DOWN) + self.add_fixed_in_frame_mobjects(epsilon_text1) - ''' - + self.play( ReplacementTransform(line_epsilon1, line_epsilon1_1), ReplacementTransform(line_epsilon2, line_epsilon2_1), ReplacementTransform(epsilon_line, epsilon_line_1), + ApplyMethod(dot_L_epsilon1.move_to, np.array([0,0,np.sqrt(9 - (0.6*np.cos(315*DEGREES)-1)**2 - (0.6*np.sin(315*DEGREES)+1)**2)])), + ApplyMethod(dot_L_epsilon2.move_to, np.array([0,0,np.sqrt(9 - (0.6*np.cos(135*DEGREES)-1)**2 - (0.6*np.sin(135*DEGREES)+1)**2)])), + ApplyMethod(dot_L_epsilon1_lab.move_to, np.array([-0.4,-0.4,np.sqrt(9 - (0.6*np.cos(315*DEGREES)-1)**2 - (0.6*np.sin(315*DEGREES)+1)**2)])), + ApplyMethod(dot_L_epsilon2_lab.move_to, np.array([-0.4,-0.4,np.sqrt(9 - (0.6*np.cos(135*DEGREES)-1)**2 - (0.6*np.sin(135*DEGREES)+1)**2)]))) - - + self.bring_to_front(dot_L_epsilon1, dot_L, dot_L_epsilon2) + + self.wait() + + self.add_fixed_in_frame_mobjects(epsilon_text2) + + self.play(ReplacementTransform(lines_group, lines_group_1), ReplacementTransform(delta_circle, delta_circle_1), ReplacementTransform(delta_circle_above, delta_circle_above_1), + ReplacementTransform(delta_line, delta_line1), ReplacementTransform(delta_line_lab, delta_line_lab1)) + self.bring_to_front(dot_L_epsilon1, dot_L, dot_L_epsilon2) + + self.add_fixed_orientation_mobjects(delta_line_lab1 ,dot_L_epsilon1_lab, dot_L_epsilon2_lab, dot_L_lab) - delta_lab = TextMobject(r"$\delta - disk$") - delta_lab.scale(0.5) - delta_lab.set_color(PINK) + self.wait(2) + + self.play(FadeOut(epsilon_text1), FadeOut(epsilon_text2)) + + self.add_fixed_in_frame_mobjects(epsilon_text3, epsilon_text4) + + self.wait(2) + + self.add_fixed_in_frame_mobjects(epsilon_text5) + + self.wait(2) + + + self.play(FadeOut(epsilon_text3), FadeOut(epsilon_text4), FadeOut(epsilon_text5)) - self.play(ShowCreation(circle_center)) - self.add_fixed_in_frame_mobjects(temp_circle_center) - temp_circle_center.move_to(1.5*RIGHT) - self.play(Write(temp_circle_center)) - self.play(ShowCreation(curve_circle_center)) - self.add_fixed_in_frame_mobjects(temp_curve_circle_center) - temp_curve_circle_center.move_to(1.9*UP+1*RIGHT) - self.play(Write(temp_curve_circle_center)) + self.move_camera(distance=10,phi=80* DEGREES,theta=45*DEGREES) + self.bring_to_front(dot_L_epsilon1_lab, dot_L_lab, dot_L_epsilon2_lab) + self.wait(2) + + self.move_camera(distance=10,phi=75* DEGREES,theta=135*DEGREES) + self.bring_to_front(dot_L_epsilon1_lab, dot_L_lab, dot_L_epsilon2_lab) + self.wait(2) + + circle_2 = [np.array([0.5*np.cos(i*DEGREES)-1, 0.5*np.sin(i*DEGREES)+1, 0]) for i in range(361)] + + circle_above_2 = [np.array([0.5*np.cos(i*DEGREES)-1, 0.5*np.sin(i*DEGREES)+1, np.sqrt(9 - (0.5*np.cos(i*DEGREES)-1)**2 - (0.5*np.sin(i*DEGREES)+1)**2)]) for i in range(361)] + + delta_circle_2 = Polygon(*circle_2, color = BLACK, fill_color = GREEN_E, fill_opacity= 0.5, stroke_width=0.1) - self.add_fixed_in_frame_mobjects(delta_lab) - delta_lab.move_to(0.4*DOWN+1.7*RIGHT) - self.play(Write(delta_lab)) + delta_circle_above_2 = Polygon(*circle_above_2, color = BLACK, fill_color = GREEN_E, fill_opacity= 0.5, stroke_width=0.1) + lines_2 = [Line(circle_2[i], circle_above_2[i], color = BLUE_B, opacity=0.01, stroke_width=0.1) for i in range(0,len(circle_2),1)] + lines_group_2 = VGroup(*lines_2) + line_epsilon1_2 = DashedLine(np.array([0.5*np.cos(315*DEGREES)-1, 0.5*np.sin(315*DEGREES)+1, np.sqrt(9 - (0.5*np.cos(315*DEGREES)-1)**2 - (0.5*np.sin(315*DEGREES)+1)**2)]), + np.array([0, 0, np.sqrt(9 - (0.5*np.cos(315*DEGREES)-1)**2 - (0.5*np.sin(315*DEGREES)+1)**2)]), color = YELLOW_C) + line_epsilon2_2 = DashedLine(np.array([0.5*np.cos(135*DEGREES)-1, 0.5*np.sin(135*DEGREES)+1, np.sqrt(9 - (0.5*np.cos(135*DEGREES)-1)**2 - (0.5*np.sin(135*DEGREES)+1)**2)]), + np.array([0, 0, np.sqrt(9 - (0.5*np.cos(135*DEGREES)-1)**2 - (0.5*np.sin(135*DEGREES)+1)**2)]), color = YELLOW_C) - self.begin_ambient_camera_rotation(rate=0.2) + + epsilon_line_2 = Line(np.array([0,0,np.sqrt(9 - (0.5*np.cos(315*DEGREES)-1)**2 - (0.5*np.sin(315*DEGREES)+1)**2)]), np.array([0,0,np.sqrt(9 - (0.5*np.cos(135*DEGREES)-1)**2 - (0.5*np.sin(135*DEGREES)+1)**2)]), color = "#4DC8A1") - self.play(ShowCreation(circle), ShowCreation(line1), ShowCreation(line2)) - self.play(ShowCreation(line3), ShowCreation(line4)) - self.wait(8) - ''' \ No newline at end of file + delta_line2 = Line(np.array([-1,1,0]), np.array([0.5*np.cos(0*DEGREES)-1, 0.5*np.sin(0*DEGREES)+1, 0]), color = "#000080") + delta_line_lab2 = TexMobject("\\delta", color = ORANGE).scale(0.6).move_to(delta_line1.get_center()) + + self.bring_to_front(dot_L_epsilon1, dot_L, dot_L_epsilon2) + + self.play(ReplacementTransform(lines_group_1, lines_group_2), ReplacementTransform(delta_circle_1, delta_circle_2), ReplacementTransform(delta_circle_above_1, delta_circle_above_2), + ReplacementTransform(line_epsilon1_1, line_epsilon1_2), ReplacementTransform(line_epsilon2_1, line_epsilon2_2), ReplacementTransform(epsilon_line_1, epsilon_line_2), + ReplacementTransform(delta_line1, delta_line2), ReplacementTransform(delta_line_lab1, delta_line_lab2), + ApplyMethod(dot_L_epsilon1.move_to, np.array([0,0,np.sqrt(9 - (0.5*np.cos(315*DEGREES)-1)**2 - (0.5*np.sin(315*DEGREES)+1)**2)])), + ApplyMethod(dot_L_epsilon2.move_to, np.array([0,0,np.sqrt(9 - (0.5*np.cos(135*DEGREES)-1)**2 - (0.5*np.sin(135*DEGREES)+1)**2)])), + ApplyMethod(dot_L_epsilon1_lab.move_to, np.array([-0.4,-0.4,np.sqrt(9 - (0.5*np.cos(315*DEGREES)-1)**2 - (0.5*np.sin(315*DEGREES)+1)**2)])), + ApplyMethod(dot_L_epsilon2_lab.move_to, np.array([-0.4,-0.4,np.sqrt(9 - (0.5*np.cos(135*DEGREES)-1)**2 - (0.5*np.sin(135*DEGREES)+1)**2)]))) + + self.bring_to_front(dot_L_epsilon1, dot_L, dot_L_epsilon2) + self.add_fixed_orientation_mobjects(delta_line_lab2 ,dot_L_epsilon1_lab, dot_L_epsilon2_lab, dot_L_lab) + + self.wait(2) + \ No newline at end of file diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/gifs/file1_epsilon_delta_defn.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/gifs/file1_epsilon_delta_defn.gif index 2378bcfd..7fef5496 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/gifs/file1_epsilon_delta_defn.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/multivariable-limits-and-continuity/gifs/file1_epsilon_delta_defn.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/Partial_Derivatives_Quiz.pdf b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/Partial_Derivatives_Quiz.pdf new file mode 100644 index 00000000..12559d88 Binary files /dev/null and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/Partial_Derivatives_Quiz.pdf differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file2_partial_deriv_hill.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file2_partial_deriv_hill.py index bfb76878..cd248590 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file2_partial_deriv_hill.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file2_partial_deriv_hill.py @@ -17,7 +17,7 @@ def construct(self): u, 0, 2 - u*u - ]),color=RED_E,t_min=-1.2,t_max=1.2, + ]),color=RED_E,t_min=0,t_max=1.2, ) func_y =ParametricFunction( @@ -25,7 +25,7 @@ def construct(self): 0, u, 2 - 1.5*u*u - ]),color=PINK,t_min=-1.2,t_max=1.2, + ]),color=PINK,t_min=0,t_max=1.2, ) self.set_camera_orientation(phi=60 * DEGREES, theta = 0*DEGREES) @@ -51,18 +51,29 @@ def construct(self): text_x[1].set_color(PINK) - slope_text_x = TexMobject("Slope =", "{\\partial", "f", "\\over", "\\partial", "x}").scale(0.6).move_to(2*UP + 3.5*RIGHT) + slope_text_x = TexMobject("Slope =", "{\\partial", "f", "\\over", "\\partial", "x}", "=").scale(0.6).move_to(2*UP + 3.5*RIGHT) slope_text_x[0].set_color(BLUE_E) slope_text_x.set_color_by_tex("\\partial",YELLOW_C) slope_text_x.set_color_by_tex("f",RED_E) slope_text_x[5].set_color(PINK) - self.add_fixed_in_frame_mobjects(text_x, slope_text_x) + number_x = DecimalNumber(0,color=RED_C).scale(0.7).next_to(slope_text_x, RIGHT) + + prev_x_x = 0.01 + prev_x_z = 2 + + self.add_fixed_in_frame_mobjects(text_x, slope_text_x, number_x) dot_x = Dot().rotate(PI/2).set_color(YELLOW_E) alpha_x = ValueTracker(0) vector_x = self.get_tangent_vector(alpha_x.get_value(),func_x,scale=1.5) dot_x.add_updater(lambda m: m.move_to(vector_x.get_center())) + number_x.add_updater(lambda m: m.set_value((dot_x.get_center()[2] - prev_x_z)/(dot_x.get_center()[0] - prev_x_x))) + number_x.add_updater(lambda m: self.add_fixed_in_frame_mobjects(m)) + + prev_x_x = (dot_x.get_center()[0]) + prev_x_z = (dot_x.get_center()[2]) + self.play( ShowCreation(func_x), GrowFromCenter(dot_x), @@ -76,27 +87,39 @@ def construct(self): self.add(vector_x,dot_x) - self.play(alpha_x.increment_value, 1, run_time=10, rate_func=linear) + self.play(alpha_x.increment_value, 1, run_time=3, rate_func=linear) #self.move_camera(phi=60 * DEGREES, theta = 0*DEGREES) - self.play(FadeOut(vector_x), FadeOut(dot_x), FadeOut(func_x), FadeOut(text_x), FadeOut(slope_text_x)) + self.play(FadeOut(number_x), FadeOut(vector_x), FadeOut(dot_x), FadeOut(func_x), FadeOut(text_x), FadeOut(slope_text_x)) text_y = TextMobject("Slope of the hill along", r"$y$", "axis", color = YELLOW_C).scale(0.6).move_to(2.7*UP + 3.5*RIGHT) text_y[1].set_color(RED_C) - slope_text_y = TexMobject("Slope =", "{\\partial", "f", "\\over", "\\partial", "x}").scale(0.6).move_to(2*UP + 3.5*RIGHT) + slope_text_y = TexMobject("Slope =", "{\\partial", "f", "\\over", "\\partial", "y}").scale(0.6).move_to(2*UP + 3.5*RIGHT) slope_text_y[0].set_color(BLUE_E) slope_text_y.set_color_by_tex("\\partial",YELLOW_C) slope_text_y.set_color_by_tex("f",PINK) slope_text_y[5].set_color(RED_C) - self.add_fixed_in_frame_mobjects(text_y, slope_text_y) + number_y = DecimalNumber(0,color=RED_C).scale(0.7).next_to(slope_text_y, RIGHT) + + prev_y_x = 0.01 + prev_y_z = 2 + + self.add_fixed_in_frame_mobjects(text_y, slope_text_y, number_y) dot_y = Dot().rotate(PI/2).set_color(BLUE_E) alpha_y = ValueTracker(0) vector_y = self.get_tangent_vector(alpha_y.get_value(),func_y,scale=1.5) dot_y.add_updater(lambda m: m.move_to(vector_y.get_center())) + number_y.add_updater(lambda m: m.set_value((dot_y.get_center()[2] - prev_y_z)/(dot_y.get_center()[0] - prev_y_x))) + number_y.add_updater(lambda m: self.add_fixed_in_frame_mobjects(m)) + + prev_y_x = (dot_y.get_center()[0]) + prev_y_z = (dot_y.get_center()[2]) + + self.play( ShowCreation(func_y), GrowFromCenter(dot_y), @@ -109,8 +132,8 @@ def construct(self): ) self.add(vector_y,dot_y) - self.play(alpha_y.increment_value, 1, run_time=10, rate_func=linear) - self.play(FadeOut(vector_y), FadeOut(dot_y), FadeOut(func_y), FadeOut(text_y), FadeOut(slope_text_y)) + self.play(alpha_y.increment_value, 1, run_time=3, rate_func=linear) + self.play(FadeOut(number_y), FadeOut(vector_y), FadeOut(dot_y), FadeOut(func_y), FadeOut(text_y), FadeOut(slope_text_y)) self.wait(2) def get_tangent_vector(self, proportion, curve, dx=0.001, scale=1): diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file3_partial_deriv_defn.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file3_partial_deriv_defn.py index a25ca565..2b60e16b 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file3_partial_deriv_defn.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file3_partial_deriv_defn.py @@ -54,7 +54,7 @@ def construct(self): plane2 = Polygon(np.array([0,-2.2,-2.5]),np.array([0,2.2,-2.5]),np.array([0,2.2,2.5]),np.array([0,-2.2,2.5]),np.array([0,-2.2,-2.5]), color = BLUE, fill_color = BLUE, fill_opacity = 0.2) plane2_text = TextMobject(r"$x = 0$", color = BLUE_C).move_to(2*UP + 3.2*RIGHT) - surface_eqn = TextMobject("Surface", r"$z = 2- x^2 -y^2$", color = YELLOW_C).scale(0.6).move_to(np.array([3*LEFT +3*UP])) + surface_eqn = TextMobject("Surface", r"$z = f(x,y) = 2 - x^2 - y^2$", color = YELLOW_C).scale(0.6).move_to(np.array([3*LEFT +3*UP])) surface_eqn[0].set_color(PINK) dot1 =Sphere(radius=0.08).move_to(np.array([-1,0,1])) diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file4_partial_deriv_example.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file4_partial_deriv_example.py index 5712a62d..0a5832da 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file4_partial_deriv_example.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file4_partial_deriv_example.py @@ -35,8 +35,8 @@ def construct(self): plane = Polygon(np.array([-2.2,0,-2.5]),np.array([2.2,0,-2.5]),np.array([2.2,0,2.5]),np.array([-2.2,0,2.5]),np.array([-2.2,0,-2.5]), color = GREEN, fill_color = GREEN, fill_opacity = 0.2) plane_text = TextMobject(r"$y = 0$", color = GREEN_C).move_to(2*UP + 3*RIGHT) - surface_eqn = TextMobject("Surface", r"$z = 2- x^2 -y^2$", color = PINK).scale(0.6).move_to(np.array([3*LEFT +3*UP])) - surface_eqn[0].set_color(BLUE_C) + surface_eqn = TextMobject("Surface", r"$z = f(x,y) = 2 - x^2 - y^2$", color = BLUE_C).scale(0.6).move_to(np.array([3*LEFT +3*UP])) + surface_eqn[0].set_color(PINK) line = Line(np.array([-2,0,0]), np.array([2,0,0]), color = RED_C) @@ -104,7 +104,7 @@ def construct(self): ''' for i in np.arange(-2,2,0.2): - self.play(ReplacementTransform(Line(np.array([i,0,0]), np.array([i,0,-i*i + 2]), color = GREEN_C), Line(np.array([i+0.2,0,0]), np.array([i+0.2,0,-(i+0.2)**2 + 2]), color = GREEN_C))) + self.play(ReplacementTransform(Line(np.array([i,0,0]), np.array([i,0,-i*i + 2]), color = GREEN_C), Line(np.array([i+0.2,0,0]), np.array([i+0.2,0,-(i+0.2)**2 + 2]), color = GREEN_C))) #self.wait() ''' @@ -160,8 +160,8 @@ def construct(self): plane = Polygon(np.array([0,-2.2,-2.5]),np.array([0,2.2,-2.5]),np.array([0,2.2,2.5]),np.array([0,-2.2,2.5]),np.array([0,-2.2,-2.5]), color = BLUE, fill_color = BLUE, fill_opacity = 0.2) plane_text = TextMobject(r"$x = 0$", color = BLUE_C).move_to(2*UP + 3*RIGHT) - surface_eqn = TextMobject("Surface", r"$z = 2- x^2 -y^2$", color = PINK).scale(0.6).move_to(np.array([3*LEFT +3*UP])) - surface_eqn[0].set_color(BLUE_C) + surface_eqn = TextMobject("Surface", r"$z = f(x,y) = 2 - x^2 - y^2$", color = BLUE_C ).scale(0.6).move_to(np.array([3*LEFT +3*UP])) + surface_eqn[0].set_color(PINK) line = Line(np.array([0,-2,0]), np.array([0,2,0]), color = RED_C) @@ -223,7 +223,7 @@ def construct(self): ''' for i in np.arange(-2,2,0.2): - self.play(ReplacementTransform(Line(np.array([0,i,0]), np.array([0,i,-i*i + 2]), color = BLUE_C), Line(np.array([0,i+0.2,0]), np.array([0,i+0.2,-(i+0.2)**2 + 2]), color = BLUE_C))) + self.play(ReplacementTransform(Line(np.array([0,i,0]), np.array([0,i,-i*i + 2]), color = BLUE_C), Line(np.array([0,i+0.2,0]), np.array([0,i+0.2,-(i+0.2)**2 + 2]), color = BLUE_C))) #self.wait() ''' diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file7_partial_deriv_clariant_rule.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file7_partial_deriv_clariant_rule.py index 313c6cde..b48f172f 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file7_partial_deriv_clariant_rule.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/file7_partial_deriv_clariant_rule.py @@ -12,9 +12,13 @@ def construct(self): ]),u_min=0,u_max=PI,v_min=0,v_max=2*PI, color = BLUE_C, fill_color = BLUE_C, fill_opacity = 0.1, resolution=(15, 32)).scale(1) - - function_copy1 = function.copy() - function_copy2 = function.copy() + function_x = ParametricSurface( + lambda u, v: np.array([ + 3.5*np.sin(u)*np.cos(v), + 3.5*np.sin(u)*np.sin(v), + -4*3.5*3.5*3.5*np.sin(u)*np.sin(u)*np.sin(u)*(2*np.sin(v)*np.sin(v))*np.exp(1 - 3.5*3.5*np.sin(u)*np.sin(u)) + ]),u_min=0,u_max=PI,v_min=0,v_max=2*PI, color = BLUE_C, fill_color = BLUE_C, fill_opacity = 0.1, + resolution=(15, 32)).scale(1) func_x =ParametricFunction( lambda u : np.array([ @@ -38,8 +42,11 @@ def construct(self): plane_y = Polygon(np.array([0,-3.5,-3]),np.array([0,3.5,-3]),np.array([0,3.5,3]),np.array([0,-3.5,3]),np.array([0,-3.5,-3]), color = GREEN_E, fill_color = GREEN_B, fill_opacity = 0.1) plane_text_y = TextMobject(r"$x = 0$", color = GREEN_C).move_to(np.array([0,4,2.7])).scale(0.7) - surface_eqn = TextMobject("Surface", r"$z = (x^2 + 3y^2)e^{(1 - x^2 - y^2)}$", color = YELLOW_C).scale(0.6).move_to(np.array([4.6*LEFT+3.5*UP])) + surface_eqn = TextMobject("Surface", r"$z = f(x,y) = (x^2 + 3y^2)e^{(1 - x^2 - y^2)}$", color = YELLOW_C).scale(0.6).move_to(np.array([4.1*LEFT+3.8*UP])) surface_eqn[0].set_color(BLUE_C) + number_plane = NumberPlane() + + line = Line(np.array([0,-1,3]), np.array([0,-1,-3]), color = PURPLE) self.set_camera_orientation(phi=60 * DEGREES, theta = 45*DEGREES) @@ -54,15 +61,20 @@ def construct(self): self.add_fixed_orientation_mobjects(axis[1]) self.play(ShowCreation(function)) + self.wait() + self.play(ShowCreation(number_plane)) self.add_fixed_in_frame_mobjects(surface_eqn) - self.play(ShowCreation(plane_x), ShowCreation(plane_y)) + self.play(ShowCreation(plane_x), ShowCreation(plane_y), ShowCreation(line)) self.add_fixed_orientation_mobjects(plane_text_x, plane_text_y) - self.play(ShowCreation(func_x), ShowCreation(func_y)) + self.move_camera(phi=0* DEGREES,theta=45*DEGREES) + self.wait(3) + self.move_camera(phi=60* DEGREES,theta=45*DEGREES) + #self.play(ShowCreation(func_x), ShowCreation(func_y)) - dot_x = Dot().rotate(PI/2).set_color(YELLOW_E) + dot_x = Dot().rotate(PI/2).set_color(YELLOW_C) alpha_x = ValueTracker(0) vector_x = self.get_tangent_vector(alpha_x.get_value(),func_x,scale=1.5) dot_x.add_updater(lambda m: m.move_to(vector_x.get_center())) @@ -92,17 +104,21 @@ def construct(self): ) self.add(vector_x,dot_x) - self.play(alpha_x.increment_value, 1, run_time=10, rate_func=linear) + self.play(alpha_x.increment_value, 1, run_time=5, rate_func=linear) self.add(vector_y,dot_y) - self.play(alpha_y.increment_value, 1, run_time=10, rate_func=linear) + self.play(alpha_y.increment_value, 1, run_time=5, rate_func=linear) self.wait(2) - - - - + - + def get_tangent_vector(self, proportion, curve, dx=0.001, scale=1): + coord_i = curve.point_from_proportion(proportion) + coord_f = curve.point_from_proportion(proportion + dx) + reference_line = Line(coord_i,coord_f) + unit_vector = reference_line.get_unit_vector() * scale + vector = Line(coord_i - unit_vector, coord_i + unit_vector, color = ORANGE, buff=0) + return vector + diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file2_partial_deriv_hill.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file2_partial_deriv_hill.gif index 3c758ff3..d74ac4de 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file2_partial_deriv_hill.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file2_partial_deriv_hill.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file3_partial_deriv_defn.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file3_partial_deriv_defn.gif index c66b3faf..4dd1eee5 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file3_partial_deriv_defn.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file3_partial_deriv_defn.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file4_partial_deriv_example.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file4_partial_deriv_example.gif index d2bf5415..32cce4c8 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file4_partial_deriv_example.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file4_partial_deriv_example.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file7_partial_deriv_clariant_rule.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file7_partial_deriv_clariant_rule.gif index 32d5e92d..ca5beda1 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file7_partial_deriv_clariant_rule.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/partial-derivatives/gifs/file7_partial_deriv_clariant_rule.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file1_scalar_functions.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file1_scalar_functions.py index 1a6f4ed1..8d9bd20c 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file1_scalar_functions.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file1_scalar_functions.py @@ -9,8 +9,8 @@ def construct(self): arrow = Arrow(np.array([3,-3,0]),np.array([3,3,0])) line = Line(np.array([3,-1.5,0]),np.array([3,1.5,0]), color = RED_C) - dot0 = Dot().shift(np.array([3,0,0])).set_color(RED_E) - dot0_lab = TextMobject(r"$f(a)$", color = RED_E).scale(0.8).next_to(dot0, RIGHT) + dot0 = Dot().shift(np.array([3,0,0])).set_color("#8b000c") + dot0_lab = TextMobject(r"$f(a)$", color = "#8b000c").scale(0.8).next_to(dot0, RIGHT) dot1 = Dot().shift(np.array([3,-1.5,0])).set_color(RED_C) @@ -38,12 +38,12 @@ def construct(self): self.play(ShowCreation(arrow)) - self.play(ShowCreation(dot1), ShowCreation(dot2)) + self.play(ShowCreation(dot1), ShowCreation(dot2), ShowCreation(line)) self.play(ShowCreation(dot_circle)) self.play(ShowCreation(dot_circle_lab), ShowCreation(dot2_lab)) self.play(ShowCreation(A), ShowCreation(R)) self.play(GrowArrow(arrow_f), ShowCreation(dot0), ShowCreation(dot0_lab), ShowCreation(F_center), GrowArrow(arrow_R_A), ShowCreation(F), Transform(circle.copy(), line.copy())) - + self.bring_to_front(dot0) self.play(Write(scalar_function)) diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file2_domain_range.py b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file2_domain_range.py index 1b54cb66..919e68b6 100644 --- a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file2_domain_range.py +++ b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/file2_domain_range.py @@ -20,7 +20,7 @@ def construct(self): self.play(FadeOut(topic)) self.wait(1) - scalar_func_R = TextMobject(r"Scalar Valued Functions in $R$").scale(1.5).set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) + scalar_func_R = TextMobject(r"Scalar Valued Functions in $\mathbb{R}$").scale(1.5).set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) self.play(Write(scalar_func_R)) self.play(FadeOut(scalar_func_R)) self.wait(1) @@ -55,7 +55,7 @@ def construct(self): domainMsg.scale(0.5) domainMsg.set_color(GREEN) - + domain_subset = TextMobject(r"Domain $\subset \mathbb{R}$", color = PURPLE).scale(0.7).move_to(self.graph_origin+3.5*YTD*UP+2*XTD*RIGHT) self.play(ShowCreation(graphobj)) @@ -67,11 +67,9 @@ def construct(self): self.wait(1) self.play(GrowArrow(domainline1)) self.play(GrowArrow(domainline2)) - self.play(Write(domainMsg)) + self.play(Write(domainMsg), Write(domain_subset)) self.wait(3) - self.wait(2) - @@ -98,8 +96,8 @@ def construct(self): sine_lab = self.get_graph_label(sineobj, label = "\\sin(x)") - rangeline1 = Line(8*XTD*LEFT,1*YTD*UP+8*XTD*LEFT) - rangeline2 = Line(8*XTD*LEFT,1*YTD*DOWN+8*XTD*LEFT) + rangeline1 = Arrow(8*XTD*LEFT,1*YTD*UP+8*XTD*LEFT, buff = 0) + rangeline2 = Arrow(8*XTD*LEFT,1*YTD*DOWN+8*XTD*LEFT, buff = 0) rangeline1.set_color(RED) rangeline2.set_color(RED) @@ -119,7 +117,7 @@ def construct(self): domainMsg.scale(0.5) domainMsg.set_color(GREEN) - + domain_subset = TextMobject(r"Domain $\subseteq \mathbb{R}$", color = PURPLE).scale(0.7).move_to(self.graph_origin+0.8*YTD*UP+4.5*XTD*RIGHT) self.play(ShowCreation(sineobj)) self.play(ShowCreation(sine_lab)) @@ -130,16 +128,17 @@ def construct(self): self.wait(1) self.play(GrowArrow(domainline1)) self.play(GrowArrow(domainline2)) - self.play(Write(domainMsg)) + self.play(Write(domainMsg), Write(domain_subset)) self.wait(3) - + + class Paraboloid(ThreeDScene): def construct(self): - scalar_func_R2 = TextMobject(r"Scalar Valued Functions in $R^2$").scale(1.5).set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) + scalar_func_R2 = TextMobject(r"Scalar Valued Functions in $\mathbb{R}^2$").scale(1.5).set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE) self.play(Write(scalar_func_R2)) self.play(FadeOut(scalar_func_R2)) self.wait(1) @@ -155,7 +154,7 @@ def construct(self): resolution=(15, 32)).scale(1) domain = Polygon(np.array([-5,-5,0]),np.array([5,-5,0]),np.array([5,5,0]),np.array([-5,5,0]),np.array([-5,-5,0]), color = BLUE_C, fill_color = BLUE_C, fill_opacity = 0.2) - domain_lab = TextMobject(r"$Domain: R^2$", color = YELLOW_C).scale(0.7).move_to(1*DOWN + 2*LEFT) + domain_lab = TextMobject(r"$Domain: \mathbb{R}^2$", color = YELLOW_C).scale(0.7).move_to(1*DOWN + 2*LEFT) rangef = Line(np.array([0, 0,0]), np.array([0, 0,5]), color = RED_C) rangef_lab = TextMobject(r"$Range: z \geq 0$", color = RED_C).scale(0.7).move_to(2*UP + 1.5*RIGHT) @@ -185,6 +184,4 @@ def construct(self): self.wait() self.play(ShowCreation(rangef)) self.add_fixed_in_frame_mobjects(rangef_lab) - self.wait(5) - - \ No newline at end of file + self.wait(5) \ No newline at end of file diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file1_scalar_functions.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file1_scalar_functions.gif index bea9c7b9..aaed4376 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file1_scalar_functions.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file1_scalar_functions.gif differ diff --git a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file2_domain_range.gif b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file2_domain_range.gif index 6801e4f6..00c87cc9 100644 Binary files a/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file2_domain_range.gif and b/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/scalar-functions/gifs/file2_domain_range.gif differ