"""
Les différents triangles (animation)
Auteur: Stéphane Pasquet
https://mathweb.fr
Date: 2021-08-19

Dans un terminal : manim triangles.py types ou manim -ql -p triangles.py types
"""

from manim import *

class types(Scene):    
    def construct(self):
        self.camera.background_color = "#ffffff"
        
        # Titre & mathweb.fr
        
        titre = Text("Quelques triangles").set_color(GREEN).shift([0,3.5,0]).scale(0.75)
        self.play(Write(titre), run_time = 0.1)
        
        mathweb = Text("Mathweb.fr").shift([6,-3.75,0]).scale(0.33).set_color(BLUE)
        self.play(Write(mathweb), run_time = 0.1)
        
        # Rappel : points coins sup gauche : Dot([-7.1,3.95,0])
        
        
        # Triangle rectangle
        
        A = Dot([-7,-2,0])
        B = Dot([-7,2,0])
        C = Dot([0,-2,0])
        
        D = Dot([-7,-1.5,0])
        E = Dot([-6.5,-1.5,0])
        F = Dot([-6.5,-2,0])
        
        AB = Line(A.get_center(),B.get_center()).set_color(BLACK)
        CA = Line(C.get_center(),A.get_center()).set_color(BLACK)
        BC = Line(B.get_center(),C.get_center()).set_color(BLACK)
        
        DE = Line(D.get_center(),E.get_center()).set_color(RED)
        EF = Line(E.get_center(),F.get_center()).set_color(RED)
        
        self.play(Create(AB), run_time = 0.5)
        self.play(Create(BC), run_time = 0.5)
        self.play(Create(CA), run_time = 0.5)
        
        self.play(Create(DE), run_time = 0.5)
        self.play(Create(EF), run_time = 0.5)
        
        phrase = Text("Triangle rectangle").shift([3.5,1.5,0]).set_color(RED)
        descr = Text("Triangle ayant un angle droit.").shift([3.5,0.5,0]).scale(0.5).set_color(BLACK)
        self.play(Write(phrase), run_time = 0.5)
        self.play(Write(descr), run_time = 0.5)
        
        fleche = CurvedArrow([3.5,0.3,0],[-6.75,-1.75,0],radius=-15).set_color(GREEN)
        self.play(Write(fleche), run_time = 0.5)
        
        self.wait(10)
        
        L = [ AB, CA, BC, DE, EF, phrase, descr, fleche ]
        
        for obj in L[::-1]:
            self.play(FadeOut(obj),run_time=0.1)
        
        
        # Triangle isocèle
        
        
        A = Dot([-7,-3,0])
        B = Dot([-2,-3,0])
        C = Dot([-4.5,2,0])
        AB = Line(A.get_center(),B.get_center()).set_color(PURPLE)
        CA = Line(C.get_center(),A.get_center()).set_color(BLUE)
        BC = Line(B.get_center(),C.get_center()).set_color(BLUE)
        self.play(Create(AB), run_time = 0.5)
        self.play(Create(BC), run_time = 0.5)
        self.play(Create(CA), run_time = 0.5)
        
        codage1 = Text("/").shift([-3.25,-0.5,0]).scale(2).set_color(BLUE)
        codage2 = Text("/").shift([-5.75,-0.5,0]).scale(2).set_color(BLUE)
        codage3 = Text("×").shift([-4.5,-3,0]).scale(2).set_color(PURPLE)
        codage2.rotate(-3 * TAU / 8)
        
        self.play(Write(codage1),run_time=0.1)
        self.play(Create(codage2))
        self.play(Write(codage3),run_time=0.1)
        
        phrase = Text("Triangle isocèle").shift([2.5,1.5,0]).set_color(RED)
        descr = MarkupText(f'Triangle ayant exactement <span fgcolor="{BLUE}">deux côtés de même mesure</span>.', color=BLACK).shift([2.5,0.5,0]).scale(0.4)
        self.play(Write(phrase), run_time = 0.5)
        self.play(Write(descr), run_time = 0.5)
        
        etymo = MarkupText(f'<span fgcolor="{BLUE}">isocèle</span> vient du grec: <span fgcolor="{RED}">isoskelês</span> (aux jambes égales).', color=BLACK).shift([2.5,-0.5,0]).scale(0.33)
        self.play(Write(etymo), run_time = 0.5)
        
        self.wait(10)
        
        L = [AB, CA, BC, codage1,codage2,codage3,phrase,descr,etymo]
        for obj in L[::-1]:
            self.play(FadeOut(obj),run_time=0.1)
        
        
        # Triangle rectangle isocèle
        delta = 0.25
    
        A = Dot([-7+delta,-3,0])
        B = Dot([-2+delta,-3,0])
        C = Dot([-7+delta,2,0])
        AB = Line(A.get_center(),B.get_center()).set_color(BLUE)
        CA = Line(C.get_center(),A.get_center()).set_color(BLUE)
        BC = Line(B.get_center(),C.get_center()).set_color(PURPLE)
        self.play(Create(AB), run_time = 0.5)
        self.play(Create(BC), run_time = 0.5)
        self.play(Create(CA), run_time = 0.5)
        
        D = Dot([-7+delta,-2.5,0])
        E = Dot([-6.5+delta,-2.5,0])
        F = Dot([-6.5+delta,-3,0])
        DE = Line(D.get_center(),E.get_center()).set_color(GREEN)
        EF = Line(E.get_center(),F.get_center()).set_color(GREEN)
        self.play(Create(DE), Create(EF), run_time = 0.5)
        
        codage1 = Text("/").shift([-4.5+delta,-3,0]).scale(2).set_color(BLUE)
        codage2 = Text("/").shift([-7+delta,-0.5,0]).scale(2).set_color(BLUE)
        codage3 = Text("//").shift([-4.5+delta,-0.5,0]).scale(2).set_color(PURPLE)
        
        self.play(Write(codage1) , Write(codage2) , Write(codage3) , run_time=0.1)
        
        phrase = Text("Triangle rectangle isocèle").shift([2.5,1.5,0]).set_color(RED)
        descr1 = MarkupText(f'Triangle ayant exactement <span fgcolor="{BLUE}">deux côtés de même mesure</span>.', color=BLACK).shift([2.5,0.5,0]).scale(0.4)
        descr2 = MarkupText(f'et <span fgcolor="{GREEN}">un angle droit</span>.', color=BLACK).shift([2.5,0,0]).scale(0.4)
        self.play(Write(phrase), Write(descr1) , Write(descr2) , run_time = 0.5)
        
        self.wait(10)
        
        L = [AB, CA, BC, DE, EF, codage1,codage2,codage3,phrase,descr1,descr2]
        for obj in L[::-1]:
            self.play(FadeOut(obj),run_time=0.1)
        
        
        # Triangle équilatéral
        delta = 0
    
        A = Dot([-7+delta,-3,0])
        B = Dot([-1+delta,-3,0])
        C = Dot([-4+delta,2.2,0])
        AB = Line(A.get_center(),B.get_center()).set_color(BLUE)
        CA = Line(C.get_center(),A.get_center()).set_color(BLUE)
        BC = Line(B.get_center(),C.get_center()).set_color(BLUE)
        self.play(Create(AB), run_time = 0.5)
        self.play(Create(BC), run_time = 0.5)
        self.play(Create(CA), run_time = 0.5)
        
        codage1 = Text("/").shift([-5.5+delta,-0.4,0]).scale(1.5).set_color(RED)
        codage2 = Text("/").shift([-2.5+delta,-0.5,0]).scale(1.5).set_color(RED)
        codage3 = Text("/").shift([-4+delta,-3,0]).scale(1.5).set_color(RED)
        codage1.rotate(-3 * TAU / 8)
        
        self.play(Write(codage1) , Write(codage2) , Write(codage3) , run_time=0.1)
        
        phrase = Text("Triangle équilatéral").shift([2.5,1.5,0]).set_color(RED)
        descr = MarkupText(f'Triangle dont les côtés ont <span fgcolor="{BLUE}">tous la même mesure</span>.', color=BLACK).shift([2.5,0.5,0]).scale(0.4)
        self.play(Write(phrase), Write(descr) , run_time = 0.5)
        
        etymo = MarkupText(f'<span fgcolor="{BLUE}">équilatéral</span> vient du latin: <span fgcolor="{RED}">aequi</span> (même) et <span fgcolor="{RED}">lateralis</span> (côtés).', color=BLACK).shift([2.5,-0.5,0]).scale(0.33)
        self.play(Write(etymo), run_time = 0.5)
        
        self.wait(10)
        
        L = [AB, CA, BC, codage1,codage2,codage3,phrase,descr,etymo]
        for obj in L[::-1]:
            self.play(FadeOut(obj),run_time=0.1)
        
        
        # Triangle acutangle
        
        delta = 0
    
        A = Dot([-7+delta,-3,0])
        B = Dot([-1+delta,-3,0])
        C = Dot([-5+delta,1,0])
        AB = Line(A.get_center(),B.get_center()).set_color(BLACK)
        CA = Line(C.get_center(),A.get_center()).set_color(BLACK)
        BC = Line(B.get_center(),C.get_center()).set_color(BLACK)
        self.play(Create(AB), run_time = 0.5)
        self.play(Create(BC), run_time = 0.5)
        self.play(Create(CA), run_time = 0.5)
        
        angleA = Arc(radius = 0.5, angle = 1.107, color=BLUE).shift([-7,-3,0])
        angleB = Arc(radius = 0.5, arc_center = [-1,-3,0], start_angle = 2.356,  angle = 0.785, color=BLUE)
        angleC = Arc(radius = 0.5, arc_center = [-5,1,0], start_angle = 4.249, angle = 1.249, color=BLUE)
        self.play(Write(angleA) , Write(angleB) , Write(angleC))
        
        phrase = Text("Triangle acutangle").shift([2.5,0,0]).set_color(RED)
        descr = MarkupText(f'Triangle dont les angles sont tous <span fgcolor="{BLUE}">aigus</span>.', color=BLACK).shift([2.5,-1.5,0]).scale(0.4)
        self.play(Write(phrase), Write(descr) , run_time = 0.5)

        self.wait(10)
        
        L = [AB, CA, BC, angleA,angleB,angleC,phrase,descr]
        for obj in L[::-1]:
            self.play(FadeOut(obj),run_time=0.1)
        
        
        # Triangle scalène
        
        delta = 0
    
        A = Dot([-7+delta,-3,0])
        B = Dot([-1+delta,-3,0])
        C = Dot([-5+delta,1,0])
        AB = Line(A.get_center(),B.get_center()).set_color(BLACK)
        CA = Line(C.get_center(),A.get_center()).set_color(BLACK)
        BC = Line(B.get_center(),C.get_center()).set_color(BLACK)
        self.play(Create(AB), run_time = 0.5)
        self.play(Create(BC), run_time = 0.5)
        self.play(Create(CA), run_time = 0.5)
        
        phrase = Text("Triangle scalène").shift([2.5,0,0]).set_color(RED)
        descr = MarkupText(f'Triangle dont les côtés sont tous <span fgcolor="{BLUE}">de longueurs inégales</span>.', color=BLACK).shift([2.5,-1.5,0]).scale(0.4)
        self.play(Write(phrase), Write(descr) , run_time = 0.5)

        self.wait(10)
        
        L = [AB, CA, BC, phrase,descr]
        for obj in L[::-1]:
            self.play(FadeOut(obj),run_time=0.1)
        
        
        # Triangle orthique
        
        delta = 0
    
        A = Dot([-7+delta,-3,0])
        B = Dot([-1+delta,-3,0])
        C = Dot([-5+delta,1,0])
        H1 = Dot([-4,0,0])
        H2 = Dot([-5.8,-0.6,0])
        H3 = Dot([-5,-3,0])
        AB = Line(A.get_center(),B.get_center()).set_color(BLACK)
        CA = Line(C.get_center(),A.get_center()).set_color(BLACK)
        BC = Line(B.get_center(),C.get_center()).set_color(BLACK)
        AH1 = Line(A.get_center(),H1.get_center()).set_color(RED)
        BH2 = Line(B.get_center(),H2.get_center()).set_color(RED)
        CH3 = Line(C.get_center(),H3.get_center()).set_color(RED)
        carre1 = Square().shift([-5+0.1,-3+0.1,0]).set_color(RED).scale(0.1)
        carre2 = Square().shift([-4,0-0.15,0]).set_color(RED).scale(0.1)
        carre2.rotate(0.785)
        carre3 = Square().shift([-5.8+0.05,-0.6-0.15,0]).set_color(RED).scale(0.1)
        carre3.rotate(1.107)
        orthique = Polygon(H1.get_center(), H2.get_center(), H3.get_center())
        orthique.set_fill(ORANGE,opacity=0.7)
        self.play(Create(AH1), Create(BH2), Create(CH3), run_time = 0.5)
        self.play(Create(carre1),Create(carre2),Create(carre3))
        self.play(Create(AB),Create(BC),Create(CA), run_time = 0.1)
        self.play(Create(orthique))
        
        phrase = Text("Triangle orthique").shift([2.5,0,0]).set_color(RED)
        descr = MarkupText(f"Triangle formé par le <span fgcolor='{BLUE}'>pied des trois hauteurs</span> d'un triangle.", color=BLACK).shift([2.5,-1.5,0]).scale(0.4)
        self.play(Write(phrase), Write(descr) , run_time = 0.5)
        
        self.wait(10)