public bool intersects(BoundingBox box) { // this could be optimized BoundingBox b = new BoundingBox(); b.include(new Point3(minX, minY, minZ)); b.include(new Point3(maxX, maxY, maxZ)); if (b.intersects(box)) { // the box is overlapping or enclosed if (!b.contains(new Point3(box.getMinimum().x, box.getMinimum().y, box.getMinimum().z))) return true; if (!b.contains(new Point3(box.getMinimum().x, box.getMinimum().y, box.getMaximum().z))) return true; if (!b.contains(new Point3(box.getMinimum().x, box.getMaximum().y, box.getMinimum().z))) return true; if (!b.contains(new Point3(box.getMinimum().x, box.getMaximum().y, box.getMaximum().z))) return true; if (!b.contains(new Point3(box.getMaximum().x, box.getMinimum().y, box.getMinimum().z))) return true; if (!b.contains(new Point3(box.getMaximum().x, box.getMinimum().y, box.getMaximum().z))) return true; if (!b.contains(new Point3(box.getMaximum().x, box.getMaximum().y, box.getMinimum().z))) return true; if (!b.contains(new Point3(box.getMaximum().x, box.getMaximum().y, box.getMaximum().z))) return true; // all vertices of the box are inside - the surface of the box is // not intersected } return false; }