that_one_nigga_you_k

final

Jan 27th, 2025
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.63 KB | None | 0 0
  1. from manim import *
  2. import numpy as np
  3. import random
  4.  
  5. config.pixel_height = 1920
  6. config.pixel_width = 1080
  7. config.frame_height = 16
  8. config.frame_width = 9
  9. config.frame_rate = 60
  10.  
  11.  
  12.  
  13. class Funcao(Scene):
  14.     def construct(self):
  15.         # Criando o plano cartesiano personalizado
  16.         primeiraEq = MathTex(r"x + y + z = 4")
  17.         primeiraEq5 = MathTex(r"xy + yz + xz = 1", font_size = 36)
  18.         primeiraEq14 = MathTex(r"xyz = - 6", font_size = 36)
  19.  
  20.        
  21.  
  22.         imaginacao = Tex("Imaginação")
  23.         se_a_Gente = Tex("Se a gente imaginar um polinômio de terceiro grau", font_size=36)
  24.         tudo = Tex("Tudo fica fácil")
  25.         txt_grupo = VGroup(imaginacao, se_a_Gente, tudo)
  26.         txt_grupo.arrange(DOWN, aligned_edge=LEFT, buff=0.5)
  27.         txt_grupo.to_corner(UP)
  28.  
  29.         for txt in txt_grupo:
  30.             self.play(Write(txt))
  31.             self.wait(0.5)
  32.        
  33.         self.wait(1)    
  34.        
  35.         eq1 = MathTex("r_1 + r_2 + r_3", "=", "-\\frac{b}{a}", font_size = 36)
  36.         eq2 = MathTex("r_1 r_2 + r_2 r_3 + r_3 r_1", "=", "\\frac{c}{a}", font_size = 36)
  37.         eq3 = MathTex("r_1 r_2 r_3", "=", "-\\frac{d}{a}", font_size = 36)
  38.  
  39.         eq_group = VGroup(eq1, eq2, eq3)
  40.         eq_group.arrange(DOWN, aligned_edge=LEFT, buff=0.5)
  41.         eq_group.next_to(tudo, DOWN, buff=1)
  42.         eq_group.to_edge(LEFT)
  43.  
  44.         # Novas equações com substituições
  45.         # Adicionando novas partes (continuação das equações)
  46.         new_part1 = MathTex("\\quad \\Rightarrow \\quad", "x + y + z", "=", "-\\frac{b}{a}", font_size = 36).next_to(eq1, RIGHT)
  47.         new_part2 = MathTex("\\quad \\Rightarrow \\quad", "xy + yz + zx", "=", "\\frac{c}{a}", font_size = 36).next_to(eq2, RIGHT)
  48.         new_part3 = MathTex("\\quad \\Rightarrow \\quad", "xyz", "=", "-\\frac{d}{a}", font_size = 36).next_to(eq3, RIGHT)
  49.  
  50.         new_eq_parts = VGroup(new_part1, new_part2, new_part3)
  51.  
  52.         solucao1 = MathTex(r"-\frac{b}{a}", "=", r"4")
  53.         solucao2 = MathTex(r"\frac{c}{a}", "=", r"1")
  54.         solucao3 = MathTex(r"-\frac{d}{a}", "=", r"-6")
  55.  
  56.         solucao_group = VGroup(solucao1, solucao2, solucao3)
  57.         solucao_group.arrange(DOWN, aligned_edge=LEFT, buff=0.5)
  58.         solucao_group.next_to(new_eq_parts, DOWN, buff=1)
  59.         solucao_group.set_x(0)
  60.  
  61.         for eq in eq_group:
  62.             self.play(Write(eq))
  63.             self.wait(0.5)
  64.        
  65.         self.play(Write(new_eq_parts))
  66.         self.wait(2)
  67.  
  68.         self.play(Write(solucao_group))
  69.         self.wait(2)
  70.         self.play(solucao_group.animate.set_color_by_gradient(RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE))
  71.         self.wait(2)
  72.  
  73.         self.play(Unwrite(VGroup(txt_grupo, eq_group, new_eq_parts, solucao_group)))
  74.  
  75.  
  76.         npl = NumberPlane(
  77.             x_range=[-config.frame_width / 2, config.frame_width / 2],
  78.             y_range=[-config.frame_height / 2, config.frame_height / 2],
  79.             axis_config={"stroke_color": WHITE}
  80.         )
  81.         npl.add_coordinates()
  82.         self.play(Create(npl))
  83.  
  84.         # Função de terceiro grau: f(x) = ax³ + bx² + cx + d
  85.         a = ValueTracker(0)
  86.         b = ValueTracker(0)
  87.         c = ValueTracker(0)
  88.         d = ValueTracker(0)
  89.  
  90.         def cubic_function(x):
  91.             return a.get_value() * x**3 + b.get_value() * x**2 + c.get_value() * x + d.get_value()
  92.  
  93.         # Desenhar gráfico inicial
  94.         graph = always_redraw(lambda: npl.plot(cubic_function, color=YELLOW))
  95.         self.play(Create(graph))
  96.  
  97.         # Criando exibição do valor de 'a'
  98.         a_text = always_redraw(lambda:
  99.             MathTex(f"a = {a.get_value():.2f}").to_corner(UP + LEFT)
  100.         )
  101.         self.add(a_text)
  102.         b_text = always_redraw(lambda:
  103.             MathTex(f"b = {b.get_value():.2f}").next_to(a_text, DOWN)
  104.         )
  105.         c_text = always_redraw(lambda:
  106.             MathTex(f"c = {c.get_value():.2f}").next_to(b_text, DOWN)
  107.         )
  108.         d_text = always_redraw(lambda:
  109.             MathTex(f"d = {d.get_value():.2f}").next_to(c_text, DOWN)
  110.         )
  111.         self.add(b_text, c_text, d_text)
  112.  
  113.         # Função para encontrar as raízes reais do polinômio
  114.         def find_real_roots():
  115.             coef = [a.get_value(), b.get_value(), c.get_value(), d.get_value()]
  116.             roots = np.roots(coef)
  117.             # Retornar apenas raízes reais
  118.             real_roots = [root.real for root in roots if np.isreal(root)]
  119.             return real_roots
  120.  
  121.         # Inicializar pontos de interseção
  122.         intersection_circles = always_redraw(lambda:
  123.             VGroup(*[
  124.                 Circle(radius=0.1, color=RED).move_to(npl.c2p(root, 0))
  125.                 for root in find_real_roots()
  126.             ])
  127.         )
  128.         self.add(intersection_circles)
  129.  
  130.        # Lista com os valores para as animações
  131.         values = [
  132.                     (5, 3, -2, 1),
  133.                     (-5, -3, 2, -1),
  134.                     (2, -4, 3, 1),
  135.                     (1.5, -4, -8, 7),
  136.                     (-1.5, 10, 0.3, -5),
  137.                     (-1.5, 10, -30, -5),
  138.                     (1.5, -10, 3, 2.5),
  139.                     (2.5, -3, -5, 2)
  140.                 ]
  141.  
  142.         # Loop para aplicar as animações com os valores da lista
  143.         for a_val, b_val, c_val, d_val in values:
  144.             self.play(
  145.                 a.animate.set_value(a_val),
  146.                 b.animate.set_value(b_val),
  147.                 c.animate.set_value(c_val),
  148.                 d.animate.set_value(d_val),
  149.                 run_time=5,
  150.                 rate_func=rate_functions.ease_in_out_sine
  151.             )
  152.  
  153.          # Flutuação aleatória por um tempo determinado
  154.         for _ in range(20):  # Número de variações aleatórias
  155.             self.play(
  156.                 a.animate.set_value(random.uniform(-1, 1)),
  157.                 b.animate.set_value(random.uniform(-1, 1)),
  158.                 c.animate.set_value(random.uniform(-1, 1)),
  159.                 d.animate.set_value(random.uniform(-1, 1)),
  160.                 run_time=1,
  161.                 rate_func=rate_functions.linear
  162.             )
  163.  
  164.         self.wait(2)
  165.  
  166.         leftover = VGroup()
  167.         for obj in self.mobjects:
  168.             if issubclass(obj.__class__, VMobject):
  169.                 leftover += obj
  170.         self.play(Unwrite(leftover))
  171.        
  172.         sistema = MathTex(r"\left\{ \begin{aligned} &x + y + z = 4 \\ &x^2 + y^2 + z^2 = 14 \\ &x^3 + y^3 + z^3 = 34 \end{aligned} \right.")
  173.         sistema.to_edge(UP)
  174.  
  175.         self.wait(1)
  176.  
  177.  
  178. class intro(Scene):
  179.     def construct(self):
  180.         imaginacao = Tex("Imaginação")
  181.         se_a_Gente = Tex("Se a gente imaginar um polinômio de terceiro grau, tudo fica fácil")
  182.  
  183.  
  184.  
Add Comment
Please, Sign In to add comment