This script uses the pygame library to draw two squares doing a simple harmonic ocillation with a phase difference of π/2 perpendicular to each other. It also draws a circle at the x, y of the two squares.
It is proven that the circle performs uniform circle motion.
import math
import pygame
WIDTH, HEIGHT = 900, 500
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("simple harmonic motion")
FPS = 60
run = True
x1 = WIDTH/2
y2 = HEIGHT/2
A = 200
f = 0.5
Omega = 6.28 * f
totalFrames = 0
while run:
totalFrames += 1
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
y1 = A * math.sin(Omega * totalFrames / 60) + HEIGHT / 2
x2 = A * math.cos(Omega * totalFrames / 60) + WIDTH / 2
WIN.fill((0, 0, 0))
pygame.draw.line(WIN, (255, 255, 255), (WIDTH/2, 0), (WIDTH/2, HEIGHT))
pygame.draw.line(WIN, (255, 255, 255), (0, HEIGHT/2), (WIDTH, HEIGHT/2))
pygame.draw.line(WIN, (255, 0, 0), (WIDTH/2, HEIGHT/2), (x1, y1))
pygame.draw.rect(WIN, (100, 100, 100), pygame.Rect(x1-15, y1-15, 30, 30))
pygame.draw.line(WIN, (255, 0, 0), (WIDTH/2, HEIGHT/2), (x2, y2))
pygame.draw.rect(WIN, (100, 100, 100), pygame.Rect(x2-15, y2-15, 30, 30))
pygame.draw.line(WIN, (0, 255, 0), (WIDTH/2, HEIGHT/2), (x2, y1))
pygame.draw.circle(WIN, (255, 255, 255), (x2, y1), 5)
pygame.draw.circle(WIN, (255, 255, 255), (WIDTH/2, HEIGHT/2), A, 1)
pygame.display.update()
pygame.time.delay(16)
pygame.quit()