]> Skullheadx's Git Forge - Collision-Simulation.git/commitdiff
wip Continuous-Collision-Detection
authorSkullheadx <704277@pdsb.net>
Tue, 17 Jan 2023 01:35:16 +0000 (20:35 -0500)
committerSkullheadx <704277@pdsb.net>
Tue, 17 Jan 2023 01:35:16 +0000 (20:35 -0500)
collision.py
display.py

index 7bd892c79a2d0f843f8b052a7c96a4543e137df5..33ca95b05d50472e7eb820e5dfa2eb829b45fea7 100644 (file)
@@ -1,5 +1,23 @@
-def handleBoxCollision(particle, box):  # Discrete Collision Detection
+from linear_interpolation import LinearInterpolation
+import pygame
+
+
+def handleBoxCollision(particle, box):  # Continuous Collision Detection
     if particle.left <= box.left or particle.right >= box.right:
         particle.velocity.x *= -1
     if particle.bottom >= box.bottom or particle.top <= box.top:
         particle.velocity.y *= -1
+
+    next_frame, _ = particle.get_next_frame(particle.position, particle.velocity, 1)
+    x = LinearInterpolation(particle.position.x, next_frame.x)
+    y = LinearInterpolation(particle.position.y, next_frame.y)
+    t_c = (box.bottom + particle.radius - next_frame.y) / (particle.position.y - next_frame.y)
+
+    point_of_collision = pygame.Vector2((x.evaluate(t_c), y.evaluate(t_c)))
+
+    print((x.evaluate(t_c), y.evaluate(t_c)),particle.position, next_frame, t_c)
+
+    # particle.position -= next_frame - point_of_collision
+
+
+
index 77f738e3006f1af0949b2708db00a0883f78b4cc..18ca04137b8b585f705166248c0beb67865120b4 100644 (file)
@@ -22,7 +22,7 @@ class Display:
 
         self.collision_objects = {layer: [] for layer in range(self.COLLISION_LAYERS)}
 
-        self.particles = [Particle(self.CENTER, (0, 0.5), (0, 0), 15, self.collision_objects[0])]
+        self.particles = [Particle(self.CENTER, (1, 2), (0, 0), 15, self.collision_objects[0])]
         self.collision_objects[0] += self.particles
         self.box = Box((0, 0), self.WIDTH, self.HEIGHT)
         self.collision_objects[0].append(self.box)