From: Skullheadx Date: Thu, 26 Jan 2023 17:27:30 +0000 (-0500) Subject: clean up file + grid of particles X-Git-Url: http://git.skullheadx.com/life/index.html?a=commitdiff_plain;h=2e5a5e80f6195d7c1d9c2d1b641b5422c39535e2;p=Collision-Simulation.git clean up file + grid of particles --- diff --git a/collision.py b/collision.py index 3df7540..492a576 100644 --- a/collision.py +++ b/collision.py @@ -1,4 +1,6 @@ from pygame import Vector2 + + def handleBoxCollision(particle, box): # Discrete Collision Detection if particle.left <= box.left or particle.right >= box.right: particle.velocity.x *= -1 @@ -6,10 +8,11 @@ def handleBoxCollision(particle, box): # Discrete Collision Detection particle.velocity.y *= -1 -def handleParticleCollision(particle1, particle2): # https://www.vobarian.com/collisions/2dcollisions2.pdf - if particle1.position.distance_to(particle2.position) <= particle1.radius + particle2.radius and particle1 != particle2: +def handleParticleCollision(particle1, particle2): # https://www.vobarian.com/collisions/2dcollisions2.pdf + if particle1.position.distance_to(particle2.position) <= particle1.radius + particle2.radius and \ + particle1 != particle2: n = particle2.position - particle1.position - un = n/n.magnitude() + un = n / n.magnitude() ut = Vector2(-un.y, un.x) v1 = particle1.velocity @@ -23,11 +26,13 @@ def handleParticleCollision(particle1, particle2): # https://www.vobarian.com/co v1t_prime = v1t v2t_prime = v2t - v1n_prime = (v1n * (particle1.mass - particle2.mass) + 2 * particle2.mass * v2n) / (particle1.mass + particle2.mass) - v2n_prime = (v2n * (particle2.mass - particle1.mass) + 2 * particle1.mass * v1n) / (particle1.mass + particle2.mass) + v1n_prime = (v1n * (particle1.mass - particle2.mass) + 2 * particle2.mass * v2n) / ( + particle1.mass + particle2.mass) + v2n_prime = (v2n * (particle2.mass - particle1.mass) + 2 * particle1.mass * v1n) / ( + particle1.mass + particle2.mass) v1_prime = v1n_prime * un + v1t_prime * ut v2_prime = v2n_prime * un + v2t_prime * ut particle1.velocity = v1_prime - particle2.velocity = v2_prime \ No newline at end of file + particle2.velocity = v2_prime diff --git a/display.py b/display.py index 607cffe..4aed9b9 100644 --- a/display.py +++ b/display.py @@ -9,11 +9,11 @@ pygame.init() class Display: - WIDTH, HEIGHT = 640, 640 + WIDTH, HEIGHT = 1080, 720 DIMENSIONS = (WIDTH, HEIGHT) CENTER = (WIDTH / 2, HEIGHT / 2) - FPS = 60 + FPS = 0 COLLISION_LAYERS = 4 def __init__(self, window_name="Pygame"): @@ -22,9 +22,17 @@ class Display: pygame.display.set_caption(window_name) self.collision_objects = {layer: [] for layer in range(self.COLLISION_LAYERS)} - self.particles = [Particle(self.CENTER, (random.random() * 0.75, random.random() * 0.75), (0, 0), 35, 15, self.collision_objects[0]), - Particle((self.WIDTH/3, self.HEIGHT/3), (random.random() * 0.75, random.random() * 0.75), (0, 0), 35, 25, self.collision_objects[0]) - ] + self.particles = [] + + n = 5 + for i in range(1, n): + for j in range(1, n): + m = random.randint(35, 45) + speed = 0.1 + self.particles.append(Particle((self.WIDTH / n * i, self.HEIGHT / n * j), + ((random.random() - 0.5) * speed, (random.random() - 0.5) * speed), + (0, 0), m, 100, self.collision_objects[0])) + self.box = Box((0, 0), self.WIDTH, self.HEIGHT) self.collision_objects[0] += self.particles @@ -40,6 +48,7 @@ class Display: self.draw(screen) pygame.display.flip() delta = clock.tick(self.FPS) + print(delta) pygame.quit() def update(self, delta):