Пример #1
0
        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);
            }
        }
Пример #2
0
 public int Compare(DiscreteSpaceItem <T> x, DiscreteSpaceItem <T> y)
 {
     return(x.Mean.GetOrd(ord).CompareTol(tol, y.Mean.GetOrd(ord)));
 }