Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from manim import *
- from manim import GrowFromCenter as Grow
- from geom_func import *
- def split_segment(A, B, k):
- """ Координаты точки, которая делит отрезок AB в отношении k:1, считая от A """
- N = np.array(
- [
- (A[0] + B[0] * k) / (1 + k),
- (A[1] + B[1] * k) / (1 + k),
- 0
- ]
- )
- return N
- def extend_segment(A, B, k):
- """ Координаты точки, лежащей на продолжении отрезка AB за точку B через k единиц """
- dAB = distance(A, B)
- vAB = direction_vector(A, B) / dAB
- C = B + vAB * k
- return C
- config.background_color = WHITE
- LINE_BLUE = '#006699'
- LINE_ORANGE = '#ff6600'
- DOT_BLUE = '#0099ff'
- class Cheva_s_Theorem(Scene):
- def construct(self):
- DashedLine.set_default(dash_length = DEFAULT_DASH_LENGTH*2, dashed_ratio=0.6)
- MathTex.set_default(color=BLACK)
- # Треугольник
- A = 6 * LEFT + 2 * DOWN
- B = 4 * LEFT + 3 * UP
- C = 0.5 * LEFT + 2 * DOWN
- kwargs = {
- "radius": 0.045,
- "stroke_width": 0.75,
- "stroke_color": '#000',
- "z_index": 1,
- "stroke_opacity": 1,
- "fill_color": DOT_BLUE,
- }
- pA, pB, pC = [Dot(p, **kwargs) for p in [A, B, C]]
- ABC = always_redraw(lambda:
- Polygon(
- pA.get_center(),
- pB.get_center(),
- pC.get_center(),
- stroke_width=2.5,
- stroke_color=LINE_BLUE,
- )
- )
- # отметки на сторонах
- c1, a1 = (ValueTracker(i) for i in [0.5, 0.7])
- dots = VGroup()
- for i in [(pA, pB, c1), (pB, pC, a1)]:
- dot = always_redraw(lambda i=i: Dot(
- split_segment(i[0].get_center(), i[1].get_center(), i[2].get_value()),
- **kwargs
- )
- )
- dots.add(dot)
- C1, A1 = dots
- pK = always_redraw(lambda:
- Dot(
- line_intersection(
- [pA.get_center(), A1.get_center()],
- [pC.get_center(), C1.get_center()]),
- **kwargs
- )
- )
- B1 = always_redraw(lambda:
- Dot(
- line_intersection(
- [pA.get_center(), pC.get_center()],
- [pB.get_center(), extend_segment(pB.get_center(), pK.get_center(), 5)]),
- **kwargs
- )
- )
- dots.add(B1)
- # чевианы
- lines = VGroup()
- for d in [(pA, A1), (pB, B1), (pC, C1)]:
- line = always_redraw(lambda d=d:
- Line(d[0].get_center(), d[1].get_center()).set_stroke(LINE_ORANGE, 2.5)
- )
- lines.add(line)
- # лейблы
- # labels = VGroup()
- # num = ["A", "B", "C", "A_1", "B_1", "C_1"]
- # for i, s in enumerate([pA, pB, pC, A1, B1, C1]):
- # vec = normalize(s.get_center() - pK.get_center())
- # label = always_redraw(lambda i=i:
- # MathTex(f"{num[i]}").scale(0.6).next_to(s, vec, buff = 0.1)
- # )
- # labels.add(label)
- labels = MathTex('A', 'B', 'C', 'A_1', 'B_1', 'C_1').scale(0.6).set_color(BLACK).set_z_index(3)
- for i, s in enumerate([pA, pB, pC, A1, B1, C1]):
- vec = normalize(s.get_center() - pK.get_center())
- labels[i].add_updater(lambda i: i.next_to(s, vec, buff = 0.1))
- # анимации
- self.add(pA, pB, pC, ABC, dots, lines, pK, labels)
- pairs = [(a1, 2.5), (c1, 1.5)]
- anims = [v.animate.set_value(t) for v, t in pairs]
- anims_kwargs = {"run_time": 8, "rate_func": there_and_back}
- self.play(*anims, **anims_kwargs)
- self.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement