public void rangeQuery(final IShape query, final IVisitorQT v) {
		Stack<QuadTree> st = new Stack<QuadTree>();
		
		if (getCnt() > 0 && query.intersects(getBoundary())) st.add(this);
		
		while (!st.empty()) {
			QuadTree qt = st.pop();
			if (qt.getChTrees() == null) { // leaf
				for (int i = 0; i < qt.cnt; ++i) {
					if (query.contains(qt.getEntry(i).getShape())) {
						v.visitEntry(qt.getEntry(i));
					}
				}
			} else {
				for (int i = 0; i < qt.getDivision(); ++i) {
					if (qt.getChTree(i).getCnt() > 0 && qt.getChTree(i).getBoundary().intersects(query)) {
						st.add(qt.getChTree(i));
					}
				}
			}
		}
	}