Advertisement
NikaGreg

Untitled

May 27th, 2023
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.01 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. def counter(mob):
  10.     S = area_rect(mob[0])
  11.     for i in range(len(mob)):
  12.         s = area_rect(mob = mob[i])
  13.         S += s
  14.     return S
  15.  
  16. class GraphAreaPlot(Scene):
  17.     def construct(self):
  18.         ax = Axes(
  19.             x_range=[-3, 3],
  20.             y_range=[-1.5, 1.5],
  21.             x_axis_config={
  22.                 "numbers_to_include": [-1, 1],
  23.                 "tip_width": 0.15,
  24.                 "tip_height": 0.15,
  25.                 "tick_size": 0.08  
  26.                 },
  27.             y_axis_config={
  28.                 "tip_width": 0.15,
  29.                 "tip_height": 0.15,
  30.                 "tick_size": 0.08
  31.                 }
  32.         )
  33.         labels = ax.get_axis_labels()
  34.         # график функции
  35.         graph = ax.plot(lambda x: np.cos(x), x_range=[-3, 3], color=BLUE_B)
  36.         # Разбиения
  37.         dx = ValueTracker(0.3)
  38.         riemann_area = always_redraw(lambda:
  39.             ax.get_riemann_rectangles(
  40.                 graph,
  41.                 x_range=[0, 0.5 * PI],
  42.                 dx=dx.get_value(),
  43.                 color=TEAL_A,
  44.                 fill_opacity=0.9,
  45.                 stroke_width=0.2,
  46.                 input_sample_type="right"
  47.             )
  48.         )
  49.         # счетчик разбиений
  50.         num = always_redraw(
  51.             lambda: MathTex("n =", str(round(len(riemann_area), 0))
  52.             ).to_edge(UR)
  53.         )
  54.         num[1].add_updater(
  55.             lambda num: num.become(Tex(str(round(len(riemann_area), 0))).next_to(num[0], RIGHT, buff = 0.05)))
  56.  
  57.         # счетчик площади
  58.         num_S = always_redraw(
  59.             lambda: MathTex(
  60.                 "S =",
  61.                 str(round(counter(riemann_area), 2)
  62.             )
  63.         ).next_to(num, DOWN, aligned_edge=RIGHT))
  64.         num_S[1].add_updater(
  65.             lambda num: num.become(Tex(str(round(counter(riemann_area), 2))).next_to(num[0], RIGHT, buff = 0.05)))  
  66.         #
  67.         area = ax.get_area(
  68.             graph,
  69.             [0, 0.5 * PI],
  70.             color=(YELLOW, YELLOW),
  71.             opacity=1,
  72.             stroke_width=0
  73.         )
  74.  
  75.         # анимации
  76.         self.add(ax, labels)
  77.         self.add(graph, riemann_area, num, num_S)
  78.         self.play(dx.animate.set_value(0.2), run_time = 10)
  79.         self.wait()
  80.         # self.play(Create(graph), run_time = 1.5)
  81.         # self.play(DrawBorderThenFill(riemann_area), run_time = 2.5, lag_ratio = 0.2)
  82.         # self.play(FadeIn(num), FadeIn(num_S))
  83.         # self.play(dx.animate.set_value(0.03), run_time = 10)
  84.         # self.wait()
  85.         # self.play(FadeOut(num, shift = DOWN), FadeOut(num_S, shift = DOWN))
  86.         # self.play(ReplacementTransform(riemann_area, area), run_time = 2)
  87.         # self.add(area)
  88.         # self.remove(riemann_area)
  89.         # self.wait(2)
  90.  
  91.  
  92.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement