Advertisement
NikaGreg

Untitled

May 27th, 2023
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. from manim import *
  2.  
  3. def area_rect(mob):
  4.     height = np.linalg.norm(mob.get_right()[1] - mob.get_right()[0])
  5.     width = np.linalg.norm(mob.get_right()[2] - mob.get_right()[1])
  6.     s = height * width
  7.     return s
  8.  
  9. class GraphAreaPlot(Scene):
  10.     def construct(self):
  11.         ax = Axes(
  12.             x_range=[-3, 3],
  13.             y_range=[-1.5, 1.5],
  14.             x_axis_config={
  15.                 "numbers_to_include": [-1, 1],
  16.                 "tip_width": 0.15,
  17.                 "tip_height": 0.15,
  18.                 "tick_size": 0.08  
  19.                 },
  20.             y_axis_config={
  21.                 "tip_width": 0.15,
  22.                 "tip_height": 0.15,
  23.                 "tick_size": 0.08
  24.                 }
  25.         )
  26.         labels = ax.get_axis_labels()
  27.         # график функции
  28.         graph = ax.plot(lambda x: np.cos(x), x_range=[-3, 3], color=BLUE_B)
  29.         # Разбиения
  30.         dx = ValueTracker(0.3)
  31.         riemann_area = always_redraw(lambda:
  32.             ax.get_riemann_rectangles(
  33.                 graph,
  34.                 x_range=[0, 0.5 * PI],
  35.                 dx=dx.get_value(),
  36.                 color=TEAL_A,
  37.                 fill_opacity=0.9,
  38.                 stroke_width=0.2,
  39.                 input_sample_type="right"
  40.             )
  41.         )
  42.         # счетчик разбиений
  43.         num = always_redraw(
  44.             lambda: MathTex("n =", str(round(len(riemann_area), 0))
  45.             ).to_edge(UR)
  46.         )
  47.         num[1].add_updater(
  48.             lambda num: num.become(Tex(str(round(len(riemann_area), 0))).next_to(num[0], RIGHT, buff = 0.05)))
  49.  
  50.         # счетчик площади
  51.         counter = area_rect(mob = riemann_area[0])
  52.         for i in range(len(riemann_area)):
  53.             s = area_rect(mob = riemann_area[i])
  54.             counter += s
  55.  
  56.         num_S = always_redraw(
  57.             lambda: MathTex(
  58.                 "S =",
  59.                 str(round(counter, 2)
  60.             )
  61.         ).next_to(num, DOWN, aligned_edge=RIGHT))
  62.         num_S[1].add_updater(
  63.             lambda num: num.become(Tex(str(round(counter, 2))).next_to(num[0], RIGHT, buff = 0.05)))  
  64.    
  65.  
  66.        
  67.         self.add(ax, labels)
  68.         self.add(graph, riemann_area, num, num_S)
  69.         self.play(dx.animate.set_value(0.2), run_time = 10)
  70.         self.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement