from manimlib.imports import * class AreaUnderCurve(GraphScene): CONFIG = { "x_min" : -1, "x_max" : 8, "y_min" : -1, "y_max" : 5, "y_axis_label": "$y$", "x_tick_frequency" : 1, "y_tick_frequency" : 1, "x_labeled_nums": list(np.arange(-1, 9)), "y_labeled_nums": list(np.arange(-1, 6)), "y_axis_height":5.5, "graph_origin": ORIGIN+4*LEFT+2.5*DOWN, } def construct(self): X = RIGHT*self.x_axis_width/(self.x_max- self.x_min) Y = UP*self.y_axis_height/(self.y_max- self.y_min) sofar_text=TextMobject(r"So far we have integrated over \\ rectangular regions") self.play(Write(sofar_text)) self.play(sofar_text.to_edge,UP) self.setup_axes(animate=False) rect= self.get_graph( lambda x : 3, x_min = 0, x_max = 5, color = GREEN) rect_region = self.get_riemann_rectangles( rect, x_min = 0, x_max = 5, dx =.01, start_color = GREEN, end_color = GREEN, fill_opacity = 0.75, stroke_width = 0, ) self.play(ShowCreation(rect_region)) self.wait(.5) rect_int=TextMobject(r"Here the integration limits are set as").to_edge(UP) rect_lim=TextMobject(r"$$\int_{x=0}^{5}\int_{y=0}^{3}$$").next_to(rect_int,DOWN) const_text=TextMobject(r"$\longleftarrow $ \textsf the limits are\\ constant values").next_to(rect_lim,RIGHT) self.play(ReplacementTransform(sofar_text,rect_int)) self.wait(1.5) self.play(FadeIn(rect_lim)) self.wait(2) self.play(Write(const_text)) self.wait(2) self.play(FadeOut(rect_int), FadeOut(rect_lim),FadeOut(const_text)) non_rect_text=TextMobject(r"Now we see how to integrate over \\ non-rectangular regions") non_rect_text.to_edge(UP) self.play(Write(non_rect_text)) self.wait(1.5) self.play(FadeOut(rect_region)) c1= self.get_graph( lambda x : x**2/4, x_min = 0, x_max = 4, color = RED) c1_region = self.get_riemann_rectangles( c1, x_min = 0, x_max = 4, dx =.01, start_color = BLUE, end_color = BLUE, fill_opacity = 0.75, stroke_width = 0, ) self.add(c1,c1_region) # self.wait(2) c2= self.get_graph( lambda x :12-2*x, x_min = 4, x_max = 6, color = RED) c2_region = self.get_riemann_rectangles( c2, x_min = 4, x_max = 6, dx =.01, start_color = BLUE, end_color = BLUE, fill_opacity = .75, stroke_width = 0, ) self.add(c2_region,c2) self.wait(1.5) c=VGroup(*[c1,c2]) no_func_text=TextMobject(r"The whole region can't be expressed as\\ bounded by a single $f(x)$").next_to(c2,UP,buff=LARGE_BUFF) self.play(ReplacementTransform(non_rect_text,no_func_text)) self.wait(1) self.play(Indicate(c)) self.wait(2) div_region_text=TextMobject(r"So the region is divided into two").next_to(c2,UP,buff=MED_LARGE_BUFF) self.play(ReplacementTransform(no_func_text,div_region_text)) c2.set_color(YELLOW) self.play(c2_region.set_color,YELLOW) c1_text=TextMobject("$\dfrac{x^2}{4}$").next_to(c1,IN) c2_text=TextMobject("$12-2x$").next_to(c2,IN+2*X) c_text=VGroup(*[c1_text,c2_text]) self.play(FadeIn(c_text)) self.wait(.4) self.play(Indicate(c1),Indicate(c1_text)) self.play(Indicate(c2),Indicate(c2_text)) easy_text=TextMobject(r"Now the limis can be set easily").next_to(c2,UP,buff=.5) self.play(ReplacementTransform(div_region_text,easy_text)) c1_int=TextMobject(r"$$\int_{x=0}^{4}\int_{y=0}^{\dfrac{x^2}{4}}$$").next_to(c1,IN).shift(.5*(-X+1.3*Y)) c2_int=TextMobject(r"$$\int_{x=4}^{6}\int_{y=0}^{12-2x}$$").next_to(c2,IN+X) self.play(ReplacementTransform(c1_text,c1_int),ReplacementTransform(c2_text,c2_int)) self.wait(2) total_int=TextMobject(r"The total integraton= ").to_edge(UP) plus=TextMobject("$$+$$").move_to(self.graph_origin+4*X+4.8*Y) self.play(ReplacementTransform(easy_text,total_int)) self.play(c2_region.set_color,BLUE) self.play(c1_int.next_to,c1,.1*UP, c2_int.next_to,plus,RIGHT, FadeIn(plus)) region=VGroup(*[c1_region,c2_region]) region.set_color(GREEN) self.play(ShowCreation(region)) self.wait(3) #uploaded by Somnath Pandit.FSF2020_Double_Integral