}
}
+ public void remove(T object, Rectangle2D bounds) {
+ if (leaf) {
+ contains.remove(object);
+ } else {
+
+ boolean pX = bounds.getMinX() > center.getX();
+ boolean nX = bounds.getMaxX() < center.getX();
+ boolean pY = bounds.getMinY() > center.getY();
+ boolean nY = bounds.getMaxY() < center.getY();
+
+ if (pX) {
+ if (pY) {
+ pXpY.remove(object, bounds);
+ } else if (nY) {
+ pXnY.remove(object, bounds);
+ } else {
+ pXpY.remove(object, bounds);
+ pXnY.remove(object, bounds);
+ }
+ } else if (nX) {
+ if (pY) {
+ nXpY.remove(object, bounds);
+ } else if (nY) {
+ nXnY.remove(object, bounds);
+ } else {
+ nXpY.remove(object, bounds);
+ nXnY.remove(object, bounds);
+ }
+ } else if (pY) {
+ pXpY.remove(object, bounds);
+ nXpY.remove(object, bounds);
+ } else if (nY) {
+ pXnY.remove(object, bounds);
+ nXnY.remove(object, bounds);
+ } else {
+ pXpY.remove(object, bounds);
+ pXnY.remove(object, bounds);
+ nXpY.remove(object, bounds);
+ nXnY.remove(object, bounds);
+ }
+
+ }
+ }
+
public boolean contains(T object) {
if (leaf) {
return contains.contains(object);