/** * Query for all bodies that are included in or partially intersect with the query rectangle. * @param lower 'lower left' corner of query rectangle * @param upper 'upper right' corner of query rectangle * @return Iterator over all matching elements. */ public PhQuerySF<T> queryIntersect(double[] lower, double[] upper) { long[] lUpp = new long[lower.length << 1]; long[] lLow = new long[lower.length << 1]; pre.pre(qMIN, lower, lLow); pre.pre(upper, qMAX, lUpp); return new PhQuerySF<>(pht.query(lLow, lUpp), dims, pre, true); }
@Override public boolean hasNext() { return iter.hasNext(); }
@Override public RectangleEntry<T> next() { //This reuses the entry object, but we have to clone the arrays... PhEntrySF<T> e = iter.nextEntryReuse(); return new EntryR<>(e.lower().clone(), e.upper().clone(), e.value()); }
@Override public void reset(double[] min, double[] max) { iter.reset(min, max); }
/** * Query for all bodies that are fully included in the query rectangle. * @param lower 'lower left' corner of query rectangle * @param upper 'upper right' corner of query rectangle * @return Iterator over all matching elements. */ public PhQuerySF<T> queryInclude(double[] lower, double[] upper) { long[] lUpp = new long[lower.length << 1]; long[] lLow = new long[lower.length << 1]; pre.pre(lower, lower, lLow); pre.pre(upper, upper, lUpp); return new PhQuerySF<>(pht.query(lLow, lUpp), dims, pre, false); }