render-video / proof.py
parthraninga's picture
Upload 4 files
91f29ec verified
from manim import *
class PythagoreanTheorem(Scene):
"""
A Manim scene that visually proves the Pythagorean Theorem.
"""
def construct(self):
# Define side lengths for the right triangle
a = 3.0
b = 4.0
# Colors for visual clarity
tri_color = BLUE
sq_a_color = RED_C
sq_b_color = YELLOW_C
sq_c_color = GREEN_C
# Set up the initial layout and title
self.camera.background_color = WHITE
Mobject.set_default(color=BLACK)
title = Title("Visual Proof of the Pythagorean Theorem", color=BLACK)
equation = MathTex("a^2", "+", "b^2", "=", "c^2", color=BLACK).next_to(title, DOWN, buff=0.5)
self.play(Write(title), Write(equation))
self.wait(1)
self.play(equation.animate.to_corner(UR))
p1 = np.array([a, 0, 0])
p2 = np.array([a + b, a, 0])
p3 = np.array([b, a + b, 0])
p4 = np.array([0, b, 0])
c1 = np.array([0, 0, 0])
c2 = np.array([a + b, 0, 0])
c3 = np.array([a + b, a + b, 0])
c4 = np.array([0, a + b, 0])
T1 = Polygon(c1, p1, p4, color=tri_color, fill_opacity=0.7)
T2 = Polygon(c2, p2, p1, color=tri_color, fill_opacity=0.7)
T3 = Polygon(c3, p3, p2, color=tri_color, fill_opacity=0.7)
T4 = Polygon(c4, p4, p3, color=tri_color, fill_opacity=0.7)
sq_c = Polygon(p1, p2, p3, p4, color=sq_c_color, fill_opacity=0.7)
arrangement1 = VGroup(T1, T2, T3, T4, sq_c).center()
self.play(Create(arrangement1))
c_sq_label = MathTex("c^2", color=BLACK).move_to(sq_c.get_center())
self.play(Write(c_sq_label))
self.wait(2)
T1_target = Polygon(np.array([b, 0, 0]), np.array([a+b, 0, 0]), np.array([b, b, 0]), color=tri_color, fill_opacity=0.7)
T2_target = Polygon(np.array([a+b, 0, 0]), np.array([a+b, b, 0]), np.array([b, b, 0]), color=tri_color, fill_opacity=0.7)
T3_target = Polygon(np.array([0, b, 0]), np.array([b, b, 0]), np.array([0, a+b, 0]), color=tri_color, fill_opacity=0.7)
T4_target = Polygon(np.array([b, b, 0]), np.array([b, a+b, 0]), np.array([0, a+b, 0]), color=tri_color, fill_opacity=0.7)
target_group = VGroup(T1_target, T2_target, T3_target, T4_target).move_to(arrangement1.get_center())
self.play(
Transform(T1, T1_target),
Transform(T2, T2_target),
Transform(T3, T3_target),
Transform(T4, T4_target),
FadeOut(sq_c),
FadeOut(c_sq_label)
)
self.wait(1)
sq_a = Square(side_length=a, color=sq_a_color, fill_opacity=0.7)
sq_b = Square(side_length=b, color=sq_b_color, fill_opacity=0.7)
squares_group = VGroup(sq_a, sq_b).center().move_to(arrangement1.get_center())
sq_a.align_to(T4_target, DOWN).align_to(T1_target, RIGHT)
sq_b.align_to(T1_target, UP).align_to(T4_target, LEFT)
a_sq_label = MathTex("a^2", color=BLACK).move_to(sq_a.get_center())
b_sq_label = MathTex("b^2", color=BLACK).move_to(sq_b.get_center())
self.play(Create(sq_a), Create(sq_b), Write(a_sq_label), Write(b_sq_label))
self.wait(2)
self.play(Indicate(equation))
self.wait(3)