public AbstractQuadTreeNode(AbstractQuadTreeNode<E> parent, int positionInParentNode) { this.parent = parent; this.depth = parent.getDepth() + 1; this.treeRoot = parent.getTreeRoot(); this.positionInParentNode = positionInParentNode; this.elements = new ArrayList<E>(treeRoot.maxElementsPerNode); switch (positionInParentNode) { case NW: maxX = parent.getSplitPoint().x; maxY = parent.getMaxY(); minX = parent.getMinX(); minY = parent.getSplitPoint().y; break; case NE: maxX = parent.getMaxX(); maxY = parent.getMaxY(); minX = parent.getSplitPoint().x; minY = parent.getSplitPoint().y; break; case SW: maxX = parent.getSplitPoint().x; maxY = parent.getSplitPoint().y; minX = parent.getMinX(); minY = parent.getMinY(); break; case SE: maxX = parent.getMaxX(); maxY = parent.getSplitPoint().y; minX = parent.getSplitPoint().x; minY = parent.getMinY(); break; } this.splitPoint = new Point2D.Double((maxX + minX) / 2, (maxY + minY) / 2); }