Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (406)
games submitted by our members
Games in WIP (293)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Fast & simple AABB collision detection  (Read 1213 times)
0 Members and 1 Guest are viewing this topic.
Online HeroesGraveDev

JGO Wizard


Medals: 64
Projects: 8


Muahahahahahaha...


« Posted 2012-12-12 04:04:39 »

It seems that not too many people know this technique, though it is very simple.

It should take up roughly the same amount of time as 2 circle checks.

Here is AABB.class

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
public class AABB
{
   protected Vector2Float pos, size;
   
   public AABB(Vector2Float pos, Vector2Float size)
   {
      this.pos = pos;
      this.size = size;
   }
   
   public static boolean collides(AABB a, AABB b)
   {
      if(Math.abs(a.pos.x - b.pos.x) < a.size.x + b.size.x)
      {
         if(Math.abs(a.pos.y - b.pos.y) < a.size.y + b.size.y)
         {
            return true;
         }
      }
     
      return false;
   }
   
   public static boolean inside(AABB a, Vector2Float b)
   {
      if(Math.abs(a.pos.x - b.x) < a.size.x)
      {
         if(Math.abs(a.pos.y - b.y) < a.size.y)
         {
            return true;
         }
      }
      return false;
   }
}


And if you don't have your own implementation or whatever, the simplest possible Vector2Float:

1  
2  
3  
4  
public class Vector2Float
{
   public float x, y;
}


The method
collides()
, checks whether 2 AABBs are colliding, and
inside()
, checks whether a point is inside an AABB.

What you must remember, is that unlike most AABB implementations, the pos vector, is the centre of the AABB, and the size vector is half the actual size.

Enjoy!

(And could someone do a performance test with this test vs the normal rectangle collision test?  Smiley)

Offline Riven
« League of Dukes »

JGO Overlord


Medals: 438
Projects: 4


Hand over your head.


« Reply #1 - Posted 2012-12-12 05:08:16 »

What you must remember, is that unlike most AABB implementations, the pos vector, is the centre of the AABB, and the size vector is half the actual size.
Then rename your fields to center and halfSize!

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Projects: Revenge of the Titans, Titan Attacks, Droid Assault, and Ultratron
Online HeroesGraveDev

JGO Wizard


Medals: 64
Projects: 8


Muahahahahahaha...


« Reply #2 - Posted 2012-12-12 05:57:52 »

What you must remember, is that unlike most AABB implementations, the pos vector, is the centre of the AABB, and the size vector is half the actual size.
Then rename your fields to center and halfSize!

Why would I want to do that? I know what they mean. I do what makes sense to me.
If other people want to change the names, then they can. I just notified them of what the fields are.

Games published by our own members! Check 'em out!
Play the free demo of Revenge of the Titans!
Offline BoBear2681

JGO Coder


Medals: 18



« Reply #3 - Posted 2012-12-12 06:09:49 »

I like giving my variables misleading names also.  To hell with maintenance or readability.  Tongue

A guy I used to work with wrote super-terse C code, and loved giving all variables 1- or 2-character names.  Not always the first letter of the "logical" name of the variable either.  "Who cares?  I know what the variables are for!" he would say.
Offline Jimmt
« Reply #4 - Posted 2012-12-12 06:20:19 »

Sure, you know what it's for, but isn't the whole point of posting the code so other people know and understand the code?
Online HeroesGraveDev

JGO Wizard


Medals: 64
Projects: 8


Muahahahahahaha...


« Reply #5 - Posted 2012-12-12 06:59:04 »

Which is why I added the note at the bottom which started the whole discussion.

Offline kaffiene

Senior Member


Medals: 2



« Reply #6 - Posted 2012-12-12 07:09:12 »

There's kind of a convention of tidying up code and making it readable when it's offered up to others.

But, whatever.
Online Roquen

JGO Ninja


Medals: 66



« Reply #7 - Posted 2012-12-12 07:42:47 »

Storing the center and the extent is (IHMO) the most reasonable.  Actually the names are fine as well, I'd probably use 'center' and extent or delta...but that's a different story.  But to be useful to others what the variables 'do' should be in code block...at least in the form of comments at the decl.
Pages: [1]
  ignore  |  Print  
 
 

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Get high quality music tracks for your game!

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (78 views)
2013-05-17 21:29:12

alaslipknot (89 views)
2013-05-16 21:24:48

gouessej (121 views)
2013-05-16 00:53:38

gouessej (113 views)
2013-05-16 00:17:58

theagentd (126 views)
2013-05-15 15:01:13

theagentd (113 views)
2013-05-15 15:00:54

StreetDoggy (156 views)
2013-05-14 15:56:26

kutucuk (179 views)
2013-05-12 17:10:36

kutucuk (179 views)
2013-05-12 15:36:09

UnluckyDevil (186 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.104 seconds with 20 queries.