IEnumerable <T> GetItemsAt_R(int ord, double off, double maxDist) { var itosearch = new DiscreteSpaceItem <T>(Vector3D.Axis(ord) * off); // bin search return 0,(n-1) if found or negative number so that ~result is the index of // the first element greather thant those we search for var bsr = sorted[ord].BinarySearch(itosearch, cmp[ord]); int idx = 0; if (bsr < 0) { idx = ~bsr; } else { idx = bsr; } DiscreteSpaceItem <T> dsi = null; // right search for (int i = idx; i < sorted[ord].Count && Abs((dsi = sorted[ord][i]).Mean.GetOrd(ord) - off) <= maxDist; ++i) { yield return(dsi.Item); } // left search for (int i = idx - 1; i >= 0 && Abs((dsi = sorted[ord][i]).Mean.GetOrd(ord) - off) <= maxDist; --i) { yield return(dsi.Item); } }
public int Compare(DiscreteSpaceItem <T> x, DiscreteSpaceItem <T> y) { return(x.Mean.GetOrd(ord).CompareTol(tol, y.Mean.GetOrd(ord))); }