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
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
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
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"):
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
self.draw(screen)
pygame.display.flip()
delta = clock.tick(self.FPS)
+ print(delta)
pygame.quit()
def update(self, delta):