Resultado
from manim import *
class ResolverEcuacion(Scene):
def construct(self):
# Primera ecuación, ubicada en la parte superior
eq1 = MathTex("2x", "-", "5", "+", "4x", "=", "x", "+", "5", "-", "2x", "+", "4")
eq1.to_edge(UP)
self.play(Write(eq1))
self.wait()
# Cambia de color las incógnitas y los números que se van a mover
self.play(
eq1[6].animate.set_color(RED), # x a la derecha
eq1[8].animate.set_color(BLUE), # 5 a la derecha
eq1[10].animate.set_color(RED), # -2x a la derecha
eq1[12].animate.set_color(BLUE), # 4 a la derecha
eq1[2].animate.set_color(BLUE), # -5 a la izquierda
)
self.wait()
# Segunda ecuación: todos los términos en su lado correspondiente
eq2 = MathTex("2x", "+", "4x", "+", "2x", "-", "x", "=", "5", "+", "4", "+", "5")
eq2.next_to(eq1, DOWN, buff=0.7)
self.play(Write(eq2[0]), Write(eq2[1]), Write(eq2[2]), Write(eq2[3]), Write(eq2[5]), Write(eq2[7]), Write(eq2[9]), Write(eq2[11]))
# Colores para las incógnitas y números que se mueven
eq2[4].set_color(RED) # 2x que viene de la derecha
eq2[6].set_color(RED) # -x que viene de la derecha
eq2[8].set_color(BLUE) # 5 que viene de la derecha
eq2[10].set_color(BLUE) # 4 que viene de la derecha
eq2[12].set_color(BLUE) # 5 que viene de la izquierda
# Animaciones: mueve incógnitas y números a la vez
self.play(
ReplacementTransform(eq1[10].copy(), eq2[4]), # -2x a la izquierda como +2x
ReplacementTransform(eq1[6].copy(), eq2[6]), # x a la izquierda como -x
ReplacementTransform(eq1[8].copy(), eq2[8]), # 5 a la derecha
ReplacementTransform(eq1[12].copy(), eq2[10]), # 4 a la derecha
ReplacementTransform(eq1[2].copy(), eq2[12]), # -5 a la derecha como +5
)
self.wait()
# Devuelve los colores a normal
self.play(
eq2[4].animate.set_color(YELLOW), # 2x
eq2[6].animate.set_color(YELLOW), # -x
eq2[0].animate.set_color(YELLOW), # 2x
eq2[2].animate.set_color(YELLOW), # 4x
eq2[8].animate.set_color(GREEN), # 5
eq2[10].animate.set_color(GREEN), # 4
eq2[12].animate.set_color(GREEN) # 5
)
self.wait()
# Paso final: simplificar ambos lados
eq3 = MathTex("7x", "=", "14")
eq3.next_to(eq2, DOWN, buff=0.7)
self.play(Write(eq3))
eq3[0].set_color(YELLOW) # 7x
eq3[2].set_color(GREEN) # 14
self.play(
ReplacementTransform(eq2[0].copy(), eq3[0]), # 2x -> 7x
ReplacementTransform(eq2[2].copy(), eq3[0]), # 4x -> 7x
ReplacementTransform(eq2[4].copy(), eq3[0]), # 2x -> 7x
ReplacementTransform(eq2[6].copy(), eq3[0]), # -x -> 7x
ReplacementTransform(eq2[8].copy(), eq3[2]), # 5 -> 14
ReplacementTransform(eq2[10].copy(), eq3[2]), # 4 -> 14
ReplacementTransform(eq2[12].copy(), eq3[2]), # 5 -> 14
)
self.wait()
# Devuelve los colores a normal
self.play(
eq3[0].animate.set_color(WHITE),
eq3[2].animate.set_color(WHITE)
)
self.wait()
# --- Nueva transición: 7x = 14 --> x = 14/7 --> x = 2 ---
# Resalta el 7 antes de despejar x
siete_izq = eq3[0][0] # El primer carácter de "7x" es el "7"
self.play(siete_izq.animate.set_color(BLUE))
self.wait()
# Ecuación con fracción
eq4 = MathTex("x", "=", r"\frac{14}{7}")
eq4.next_to(eq3, DOWN, buff=0.7)
self.play(Write(eq4))
siete_denominador = eq4.get_part_by_tex("7")
catorce_numerador = eq4.get_part_by_tex("14")
catorce_numerador.set_color(WHITE) # Fuerza el color blanco
siete_denominador.set_color(BLUE)
self.play(
ReplacementTransform(siete_izq.copy(), siete_denominador)
)
self.wait(2) # El 7 permanece azul 2 segundos
# Devuelve el color a normal
self.play(siete_denominador.animate.set_color(WHITE))
self.wait()
# Último paso: simplificar la fracción
eq5 = MathTex("x", "=", "2")
eq5.next_to(eq4, DOWN, buff=0.7)
self.play(Write(eq5))
self.wait()