Java-Gaming.org Hi !
 Featured games (90) games approved by the League of Dukes Games in Showcase (754) Games in Android Showcase (229) games submitted by our members Games in WIP (842) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Fast & simple AABB collision detection  (Read 18365 times) 0 Members and 1 Guest are viewing this topic.
HeroesGraveDev

JGO Kernel

Medals: 382
Projects: 11
Exp: 4 years

┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻

 « Posted 2012-12-12 03: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?  )

Riven

« JGO Overlord »

Medals: 1340
Projects: 4
Exp: 16 years

 « Reply #1 - Posted 2012-12-12 04: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!
HeroesGraveDev

JGO Kernel

Medals: 382
Projects: 11
Exp: 4 years

┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻

 « Reply #2 - Posted 2012-12-12 04: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.

BoBear2681

JGO Coder

Medals: 19

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

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

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.
Jimmt
« League of Dukes »

JGO Kernel

Medals: 167
Projects: 5
Exp: 6 years

 « Reply #4 - Posted 2012-12-12 05: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?
HeroesGraveDev

JGO Kernel

Medals: 382
Projects: 11
Exp: 4 years

┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻

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

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

kaffiene
 « Reply #6 - Posted 2012-12-12 06: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.
Roquen

JGO Kernel

Medals: 517

 « Reply #7 - Posted 2012-12-12 06: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

 DesertCoockie (22 views) 2018-05-13 18:23:11 nelsongames (72 views) 2018-04-24 18:15:36 nelsongames (67 views) 2018-04-24 18:14:32 ivj94 (751 views) 2018-03-24 14:47:39 ivj94 (81 views) 2018-03-24 14:46:31 ivj94 (605 views) 2018-03-24 14:43:53 Solater (97 views) 2018-03-17 05:04:08 nelsongames (170 views) 2018-03-05 17:56:34 Gornova (388 views) 2018-03-02 22:15:33 buddyBro (1048 views) 2018-02-28 16:59:18
 Java Gaming Resourcesby philfrei2017-12-05 19:38:37Java Gaming Resourcesby philfrei2017-12-05 19:37:39Java Gaming Resourcesby philfrei2017-12-05 19:36:10Java Gaming Resourcesby philfrei2017-12-05 19:33:10List of Learning Resourcesby elect2017-03-13 14:05:44List of Learning Resourcesby elect2017-03-13 14:04:45SF/X Librariesby philfrei2017-03-02 08:45:19SF/X Librariesby philfrei2017-03-02 08:44:05
 java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org