Advertisement
NikaGreg

Untitled

Apr 5th, 2023
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.33 KB | None | 0 0
  1. from manim import *
  2. from manim import GrowFromCenter as Grow
  3. from geom_func import *
  4.  
  5. config.background_color = WHITE
  6.  
  7. LINE_BLUE = '#006699'
  8. LINE_ORANGE = '#ff6600'
  9. DOT_BLUE = '#0099ff'
  10.  
  11.  
  12. class Cheva_s_Theorem(Scene):
  13.     def construct(self):
  14.         DashedLine.set_default(dash_length = DEFAULT_DASH_LENGTH*2, dashed_ratio=0.6)
  15.         MathTex.set_default(color=BLACK)
  16.         # Треугольник
  17.         A = 6 * LEFT + 2 * DOWN
  18.         B = 4 * LEFT + 3 * UP
  19.         C = 0.5 * LEFT + 2 * DOWN
  20.         kwargs = {
  21.             "radius": 0.045,
  22.             "stroke_width": 0.75,
  23.             "stroke_color": '#000',
  24.             "z_index": 1,
  25.             "stroke_opacity": 1,
  26.             "fill_color": DOT_BLUE,
  27.         }
  28.         pA, pB, pC = [Dot(p, **kwargs) for p in [A, B, C]]  
  29.         ABC = always_redraw(lambda:
  30.             Polygon(
  31.                 pA.get_center(),
  32.                 pB.get_center(),
  33.                 pC.get_center(),
  34.                 stroke_width=2.5,
  35.                 stroke_color=LINE_BLUE,
  36.             )
  37.         )
  38.         # отметки на сторонах
  39.         c1, a1 = (ValueTracker(i) for i in [0.5, 0.7])
  40.         dots = VGroup()
  41.         for i in [(pA, pB, c1), (pB, pC, a1)]:
  42.             dot = always_redraw(lambda i=i: Dot(
  43.                 split_segment(i[0].get_center(), i[1].get_center(), i[2].get_value()),
  44.                 **kwargs
  45.                 )
  46.             )
  47.             dots.add(dot)
  48.         C1, A1 = dots
  49.  
  50.         pK = always_redraw(lambda:
  51.             Dot(
  52.                 line_intersection(
  53.                     [pA.get_center(), A1.get_center()],
  54.                     [pC.get_center(), C1.get_center()]),
  55.                     **kwargs
  56.             )
  57.         )
  58.         B1 = always_redraw(lambda:
  59.             Dot(
  60.                 line_intersection(
  61.                     [pA.get_center(), pC.get_center()],
  62.                     [pB.get_center(), extend_segment(pB.get_center(), pK.get_center(), 5)]),
  63.                     **kwargs
  64.             )
  65.         )
  66.         dots.add(B1)
  67.         # чевианы
  68.         lines = VGroup()
  69.         for d in [(pA, A1), (pB, B1), (pC, C1)]:
  70.             line = always_redraw(lambda d=d:
  71.                 Line(d[0].get_center(), d[1].get_center()).set_stroke(LINE_ORANGE, 2.5)
  72.             )
  73.             lines.add(line)
  74.        
  75.         # лейблы
  76.         # labels = VGroup()
  77.         # num = ["A", "B", "C", "A_1", "B_1", "C_1"]
  78.         # for i, s in enumerate([pA, pB, pC, A1, B1, C1]):
  79.         #     vec = normalize(s.get_center() - pK.get_center())
  80.         #     label = always_redraw(lambda i=i:
  81.         #         MathTex(f"{num[i]}").scale(0.6).next_to(s, vec, buff = 0.1)
  82.         #     )
  83.         #     labels.add(label)
  84.  
  85.         labels = MathTex('A', 'B', 'C', 'A_1', 'B_1', 'C_1').scale(0.6).set_color(BLACK).set_z_index(3)
  86.         for i, s in enumerate([pA, pB, pC, A1, B1, C1]):
  87.             vec = normalize(s.get_center() - pK.get_center())
  88.             labels[i].add_updater(lambda i: i.next_to(s, vec, buff = 0.1))
  89.  
  90.         # анимации
  91.         self.add(pA, pB, pC, ABC, dots, lines, pK, labels)
  92.         pairs = [(a1, 2.5), (c1, 1.5)]
  93.         anims = [v.animate.set_value(t) for v, t in pairs]
  94.         anims_kwargs = {"run_time": 8, "rate_func": there_and_back}
  95.         self.play(*anims, **anims_kwargs)
  96.         self.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement