Untitled

mail@pastecode.io avatar
unknown
python
a year ago
7.4 kB
7
Indexable
Never
from manim import *

class Euler(Scene):
    def construct(self):
        # Créer les labels pour Re et Im
        real_label = MathTex(r"\text{Re}").next_to(RIGHT*3.5, UP, buff=SMALL_BUFF)
        imag_label = MathTex(r"\text{Im}").next_to(UP*3.5, LEFT, buff=SMALL_BUFF)

        # Créer les flèches pour Re et Im
        real_arrow = Arrow(LEFT*0.25, RIGHT*3.5, tip_length=0.15, stroke_width=1)
        imag_arrow = Arrow(DOWN*0.25, UP*3.5, tip_length=0.15, stroke_width=1)

        # Ajouter les labels à la fin des flèches
        real_label.next_to(real_arrow.get_end(), RIGHT, buff=SMALL_BUFF)
        imag_label.next_to(imag_arrow.get_end(), UP, buff=SMALL_BUFF)

        # Créer le cercle de rayon
        circle = Circle(radius=2.25, stroke_width=1.5, color=WHITE)

        # Créer les points d'intersection
        un_point = MathTex(r"\text{1}").next_to(RIGHT*2.5, UP*0.4)
        i_point = MathTex(r"\text{i}").next_to( UP*2.5, RIGHT*0.4)
        
        # Cos et Sin au point 0
        cos_point = MathTex(r"{\cos\theta}").next_to(RIGHT*0.5, DOWN*0.2)
        sin_point = MathTex(r"{\sin\theta}").next_to(UP*0.4, LEFT*0.7)
        theta = MathTex(r"{\theta}", font_size=40).next_to(RIGHT*0.65, UP*0.4)
        
        # Fleche de la démonstration 
        line45d = Line(start=[-0, -0, 0], end=[1.59, 1.59, 0], stroke_width=1.5)
        linesin = Line(start=[1.59, 0, 0], end=[1.59, 1.59, 0], stroke_width=1.5)
        
        # Arc theta 
        arc = Arc(radius=0.5, start_angle=0, angle=45*DEGREES, stroke_width=1.5)
        
        #Objet de la formule 
        formule = MathTex(r"e^{i\theta}", "=", r"\cos(\theta) + i\sin(\theta)")
        serie1 = MathTex(r"e^{i\theta} = 1+i\theta+\frac{i\theta^{2}}{2!}+...+\frac{i\theta^{n}}{n!}+...").next_to(formule, UP*2, LEFT*5)
        serie2 = MathTex(r"e^{i\theta} = \sum^{\infty}_{n=0}(\frac{(i\theta)^n}{n!})= ").next_to(serie1,LEFT*0.9, buff=SMALL_BUFF)
        serie3 = MathTex(r"\sum^{\infty}_{n=0}(\frac{i^n \theta^n}{n!})").next_to(serie2,RIGHT*0.9, buff=SMALL_BUFF)
        convi = MathTex(r"[With : ", "i^{2k} = (i^2)^k = (-1)^k]").next_to(serie3,LEFT*0.9, buff=SMALL_BUFF)
        equival = MathTex(r"\Leftrightarrow").next_to(convi,DOWN, buff=SMALL_BUFF)
        equival2 = MathTex(r"\Leftrightarrow").next_to(convi,DOWN, buff=SMALL_BUFF)
        serie4 = MathTex(r"=\sum^{\infty}_{k=0}(\frac{i^{2k} \theta^{2k}}{2k!}) + \sum^{\infty}_{k=0}(\frac{i^{2k+1} \theta^{2k+1}}{2k+1!})").next_to(serie2,RIGHT*0.9, buff=SMALL_BUFF)
        serie5 = MathTex(r"\sum^{\infty}_{k=0}\frac{(-1)^{k} \theta^{2k}}{2k!} + i\sum^{\infty}_{k=0}\frac{(-1)^{k+1} \theta^{2k+1}}{(2k+1)!}").next_to(equival2, RIGHT, buff=SMALL_BUFF)
        cost = MathTex(r"{\cos\theta}").next_to(serie5, DOWN*14, buff=SMALL_BUFF)
        sint = MathTex(r"{i\sin\theta}").next_to(serie5, DOWN*14, buff=SMALL_BUFF)
        plus=MathTex(r"+").next_to(serie5, DOWN*14, buff=SMALL_BUFF)
        equal=MathTex(r"=").next_to(sint,RIGHT, buff=SMALL_BUFF)
        eitheta = MathTex(r"e^{i\theta}").next_to(sint,RIGHT, buff=SMALL_BUFF)
        equal2 = MathTex(r"=").next_to(serie4,RIGHT*2, buff=SMALL_BUFF)
        eitheta2 = MathTex(r"e^{i\theta}").next_to(serie4,RIGHT, buff=SMALL_BUFF)
        equal3 = MathTex(r"=").next_to(serie4,RIGHT*2, buff=SMALL_BUFF)
        eitheta3 = MathTex(r"e^{i\theta}").next_to(serie4,RIGHT, buff=SMALL_BUFF)
        
        # Regrouper la dernière equation dans un seul groupe
        group = VGroup(cost, plus, sint, equal, eitheta2)
        
        
        
        formule.shift(RIGHT*3.8 + UP*2)
        serie1.shift(LEFT*2.5, UP*0.8)
        serie2.shift(DOWN*0.8, RIGHT*1.8)
        serie3.shift(DOWN*0.8, RIGHT*1.8)
        convi.shift(DOWN*2.3, RIGHT*3.5)
        equival.shift(UP*1, RIGHT*1.2)
        equival2.shift(DOWN, RIGHT*1.2)
        serie4.shift(RIGHT, UP*0.5)
        serie5.shift(RIGHT*1.4, DOWN*1)
        cost.shift(LEFT*0.4)
        plus.shift(RIGHT*1.7)        
        sint.shift(RIGHT*3.5)
        equal.shift(UP*2.45, RIGHT*2.1)
        eitheta.shift(UP*2.6, RIGHT*2.6)
        equal2.shift(UP*0.565, RIGHT)
        equal3.shift(DOWN*1.5, LEFT)
        eitheta2.shift(UP*0.7, RIGHT*1.6)
        eitheta3.shift(DOWN*1.35, LEFT*0.42)
        
        # Regrouper la dernière equation dans un seul groupe
        group = VGroup(cost, plus, sint, equal, eitheta2)
        

        # Animer l'apparition des labels, des flèches et du cercle
        self.play(Create(real_label), Create(imag_label))
        self.play(Create(real_arrow), Create(imag_arrow))
        self.play(Create(circle))
        self.play(Create(i_point))
        self.play(Create(un_point))
        self.play(Create(cos_point))
        self.play(Create(sin_point))
        self.play(Create(line45d))
        self.play(Create(linesin))
        self.play(Create(arc))
        self.play(Create(theta))
        self.play(Create(formule))
        
        # Attendre quelques secondes
        self.wait(1)
        
        #Transition puis attente
        self.play(FadeOut(circle), FadeOut(un_point), FadeOut(i_point), FadeOut(arc), FadeOut(theta))
        self.play(FadeOut(linesin), FadeOut(line45d), FadeOut(cos_point), FadeOut(sin_point))
        self.play(FadeOut(real_arrow), FadeOut(imag_arrow), FadeOut(real_label), FadeOut(imag_label))
        
        # Faire bouger la formule
        self.play(formule.animate.to_corner(UL, buff=1))
        
        #Démonstraton par séries partie une
        self.play(Create(serie1))
        self.play(Create(serie2))
        self.play(Create(serie3))
        self.play(Create(convi))
        
        self.wait(1.5)
        
        #Transition 
        self.play(FadeOut(formule), FadeOut(serie1), FadeOut(serie2))
        self.play(convi.animate.to_corner(UL, buff=1))
        self.play(serie3.animate.to_corner(UL, buff=2))
        
        # Démonstraton par séries partie deux
        self.play(Create(equival))
        self.play(Create(serie4))
        self.play(Create(equal2))
        self.play(Create(eitheta2))
        self.play(Create(equival2))
        self.play(Create(serie5))
        self.play(Create(equal3))
        self.play(Create(eitheta3))
        self.wait(1)
        self.play(Create(cost))
        self.play(Create(sint))
        self.play(Create(plus))
        
        #Transition Finale
        self.play(FadeOut(convi))
        self.play(FadeOut(serie3), FadeOut(serie4), FadeOut(equival), FadeOut(equal2))
        self.play(FadeOut(equival2), FadeOut(serie5), FadeOut(equal3))
        
        #Démonstration partie finale
        self.play(cost.animate.shift(UP*2.5, RIGHT*0.6))
        self.play(plus.animate.shift(UP*2.47, LEFT*0.62))
        self.play(sint.animate.shift(UP*2.5, LEFT*1.5))
        self.play(eitheta2.animate.move_to(RIGHT*0.9 + UP*0.625), eitheta3.animate.move_to(RIGHT*0.9 + UP*0.625), run_time=2)
        self.play(Create(equal))
        
        #Création du rèctangle final
        framebox1 = SurroundingRectangle(group, buff = 0.3, color=WHITE)
        
        self.play(Create(framebox1), runtime=2)

        self.wait(2)