diff options
Diffstat (limited to 'FSF-2020/calculus-of-several-variables/div-curl-grad-and-all-that/Greens Theorem/GreensTheorem_file2_line-int.py')
-rw-r--r-- | FSF-2020/calculus-of-several-variables/div-curl-grad-and-all-that/Greens Theorem/GreensTheorem_file2_line-int.py | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/FSF-2020/calculus-of-several-variables/div-curl-grad-and-all-that/Greens Theorem/GreensTheorem_file2_line-int.py b/FSF-2020/calculus-of-several-variables/div-curl-grad-and-all-that/Greens Theorem/GreensTheorem_file2_line-int.py new file mode 100644 index 0000000..704acf7 --- /dev/null +++ b/FSF-2020/calculus-of-several-variables/div-curl-grad-and-all-that/Greens Theorem/GreensTheorem_file2_line-int.py @@ -0,0 +1,132 @@ +from manimlib.imports import * + +def field_func(coordinate): + x,y = coordinate[:2] + return np.array([ + -x, + -y, + 0 + ]) + + +class LineIntegral(MovingCameraScene, Scene): + def setup(self): + MovingCameraScene.setup(self) + Scene.setup(self) + + def get_pending(self,path,proportion,dx=0.01): + if proportion < 1: + coord_i = path.point_from_proportion(proportion) + coord_f = path.point_from_proportion(proportion+dx) + else: + coord_i = path.point_from_proportion(proportion-dx) + coord_f = path.point_from_proportion(proportion) + line = Line(coord_i,coord_f) + angle = line.get_angle() + return angle + + def construct(self): + + + # all the text + vec_f = TexMobject(r"\vec F",r" \textit{ is a vector field defined on the plane}").set_color("#EDF2EF") + c = TexMobject(r"C",r" \textit{ is a curve on the plane, oriented counter-clockwise.}").set_color("#EDF2EF") + dr = TexMobject(r"\vec dr", r"\textit{ gives the direction as we move along C}").set_color("#EDF2EF") + + intg = TexMobject(r"\oint \vec F \cdot \vec dr", r"\textit{ gives the rotation along the curve}").shift(2.5*DOWN).scale(0.7).set_color("#EDF2EF") + text = VGroup(vec_f, c, dr).scale(0.6).set_stroke(width = 1.5) + text.arrange(DOWN, buff = 0.2) + text.shift(3.2*DOWN) + + vec_f[0].set_color("#D1D646") + dr[0].set_color("#D1D646") + intg[0].set_color("#D1D646") + + + + + self.camera_frame.save_state() + vec_f_sym = TexMobject(r"\vec F") + c_sym = TexMobject(r"C").move_to(4.8*RIGHT+1.3*UP) + dr_sym = TexMobject(r"\vec dr").next_to(vec_f_sym, DOWN, buff = SMALL_BUFF) + dp_sym = TexMobject(r"\vec F \cdot \vec dr") + intg_sym = TexMobject(r"\oint \vec F \cdot \vec dr") + + symbols = VGroup(vec_f_sym, dr_sym, dp_sym, intg_sym).shift(3*UP).set_color("#D1D646") + + + + + vector_field = VectorField(field_func, x_min = -15, x_max = 15, y_min = -15, y_max = 15).fade(0.5) + boundary = Ellipse(width = 9, height = 3).set_color("#32908F") + b2 = Ellipse(width = 9, height = 3).set_color(WHITE) + + start_angle = self.get_pending(boundary, 0) + + pointer = Triangle(fill_opacity = 1).set_height(0.25).set_color(WHITE) + pointer.set_fill(WHITE) + pointer.move_to(boundary.get_start()) + pointer.rotate(- PI / 2) + pointer.save_state() + pointer.rotate(start_angle, about_point=pointer.get_center()) + dp_sym_1 = TexMobject(r"\vec F \cdot \vec dr").next_to(pointer, RIGHT, buff = SMALL_BUFF).scale(0.5).set_color("#D1D646").add_background_rectangle() + intg_sym_1 = TexMobject(r"\oint \vec F \cdot \vec dr").next_to(pointer, RIGHT, buff = SMALL_BUFF).scale(0.5).set_color("#75485E").add_background_rectangle() + dp = TexMobject(r"\vec F \cdot \vec dr \textit{ measures whether } \vec F \textit{ and } \vec dr", r" \textit{ are oriented the same way }").next_to(dp_sym_1, DOWN, buff = SMALL_BUFF).scale(0.3).set_color("#EDF2EF") + dp[1].next_to(dp[0], DOWN, buff = SMALL_BUFF) + + + # groups according to animation + #one = VGroup( vec_f, vec_f_sym) + #two = VGroup(boundary, c_sym) + #three = VGroup(dr_sym, pointer) + #four = VGroup(dp, dp_sym) #this is when to zoom in + #five = VGroup(intg, intg_sym) + + delete = VGroup(vec_f, vec_f_sym, c, dr, dr_sym) + + + self.play(ShowCreation(vec_f), ShowCreation(vec_f_sym)) + self.wait() + self.play(ShowCreation(vector_field), Indicate(vec_f_sym)) + self.wait(2) + self.play(ShowCreation(c)) + self.wait() + self.play(ShowCreation(boundary), ShowCreation(c_sym), Indicate(c)) + self.wait(2) + self.play(ShowCreation(dr)) + self.wait(2) + self.play(ShowCreation(dr_sym), Indicate(dr), ShowCreation(pointer)) + + self.play(FadeOut(delete)) + self.play( + self.camera_frame.scale,.25, + self.camera_frame.move_to,pointer + ) + self.play(ShowCreation(dp_sym_1), ShowCreation(dp[0]), ShowCreation(dp[1])) + self.add(dp_sym) + self.wait(3) + self.play(Restore(self.camera_frame)) + self.remove(dp[0], dp[1], dp_sym_1) + self.wait() + self.add(boundary, pointer, self.camera_frame) + def update_rotate_move(mob,alpha): + pointer.restore() + + angle = self.get_pending(boundary,alpha) + + pointer.move_to(boundary.point_from_proportion(alpha)) + pointer.rotate(angle, about_point=pointer.get_center()) + + + + self.play( + #self.camera_frame.scale,.25, + UpdateFromAlphaFunc(pointer,update_rotate_move), + run_time=3, + ) + self.play(Write(b2)) + self.play(ReplacementTransform(dp_sym, intg_sym), ShowCreation(intg)) + self.play(ReplacementTransform(b2, intg_sym)) + self.play(Indicate(intg_sym)) + self.wait(2) + |