OSDN Git Service

Best method to test intersection
authorVinceAngel <vinceangel3d@gmail.com>
Wed, 28 Aug 2013 17:33:04 +0000 (19:33 +0200)
committerVinceAngel <vinceangel3d@gmail.com>
Wed, 28 Aug 2013 17:33:04 +0000 (19:33 +0200)
gdx/src/com/badlogic/gdx/math/collision/BoundingBox.java

index e65c6c5..bd18287 100644 (file)
@@ -248,17 +248,20 @@ public class BoundingBox implements Serializable {
        public boolean intersects (BoundingBox b) {\r
                if(!isValid())\r
                        return false;\r
+                               \r
+               //test using SAT (separating axis theorem)\r
                \r
-               updateCorners();\r
+               float lx = Math.abs(this.cnt.x - b.cnt.x);\r
+               float sumx = (this.dim.x / 2.0f) + (b.dim.x / 2.0f); \r
+               \r
+               float ly = Math.abs(this.cnt.y - b.cnt.y);\r
+               float sumy = (this.dim.y / 2.0f) + (b.dim.y / 2.0f); \r
+               \r
+               float lz = Math.abs(this.cnt.z - b.cnt.z);\r
+               float sumz = (this.dim.z / 2.0f) + (b.dim.z / 2.0f); \r
+               \r
+               return (lx <= sumx && ly <= sumy && lz <= sumz);  \r
                \r
-               return  contains(crn[0]) || \r
-                                       contains(crn[1]) ||\r
-                                       contains(crn[2]) ||\r
-                                       contains(crn[3]) ||\r
-                                       contains(crn[4]) ||\r
-                                       contains(crn[5]) ||\r
-                                       contains(crn[6]) ||\r
-                                       contains(crn[7]);\r
        }\r
        \r
        /** Returns whether the given vector is contained in this bounding box.\r