Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

O(n^log n) algorithm for collision detection

I'm building a game engine and I was wondering: are there any algorithms out there for Collision Detection that have time complexity of O(N^log N)?

I haven't written any coding yet, but I can only think of a O(N^2) algorithm (ie: 2 for-loops looping through a list of object to see if there's collision).

Any advice and help will be appreciated.

Thanks

like image 936
Danny Avatar asked Aug 30 '26 17:08

Danny


2 Answers

Spatial partitioning can create O(n log(n)) solutions. Depending on the exact structure and nature of your objects, you'll want a different spatial partitioning algorithm, but the most common are octrees and BSP.

Basically, the idea of spatial partitioning is to group objects by the space they occupy. An object in node Y can never collide with an object in node X (unless X is a subnode of Y or vice versa). Then you partition the objects by which go in which nodes. I implemented an octree myself.

like image 110
Puppy Avatar answered Sep 02 '26 07:09

Puppy


You can minimize the number of checks by sorting the objects into areas of space. ( There is no point in checking for a collision between an object near 0,0 and one near 1000,1000 )

The obvious solution would be to succesively divide your space in half and use a tree (BSP) structure. Although this works best for sparse clouds of objects, otherwise you spend all the time checking if an object near a boundary hits an object just on the other side of the boundary

like image 20
Martin Beckett Avatar answered Sep 02 '26 06:09

Martin Beckett



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!