public AsInterval(T start, T end) { Start = start; End = new List <T> { end }; NextDimensionIntervals = new IntervalTree <T>(); }
public DIntervalTree(int dimensions) { if (dimensions <= 0) { throw new Exception("Dimension should be greater than 0."); } this.dimensions = dimensions; tree = new IntervalTree <T>(); }
/// <summary> /// does this interval overlap with any interval in this interval tree? /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> private List <DInterval <T> > GetOverlaps(IntervalTree <T> currentTree, T[] start, T[] end, int dimension) { var nodes = currentTree.GetOverlaps(new AsInterval <T>(start[dimension], end[dimension])); if (dimension + 1 == dimensions) { var result = new List <DInterval <T> >(); foreach (var node in nodes) { var fStart = new T[dimensions]; var fEnd = new T[dimensions]; fStart[dimension] = node.Start; fEnd[dimension] = node.End[node.MatchingEndIndex]; var thisDimResult = new DInterval <T>(fStart, fEnd); result.Add(thisDimResult); } return(result); } else { var result = new List <DInterval <T> >(); foreach (var node in nodes) { var nextDimResult = GetOverlaps(node.NextDimensionIntervals, start, end, dimension + 1); foreach (var nextResult in nextDimResult) { nextResult.Start[dimension] = node.Start; nextResult.End[dimension] = node.End[node.MatchingEndIndex]; result.Add(nextResult); } } return(result); } }