Exemplo n.º 1
0
        /// <summary>
        /// recursively visit node and return points within given range
        /// </summary>
        /// <param name="currentTree"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="dimension"></param>
        /// <returns></returns>
        private List <T[]> getInRange(
            RangeTree <T> currentTree,
            T[] start, T[] end, int dimension)
        {
            var nodes = currentTree.GetInRange(start[dimension], end[dimension]);

            if (dimension + 1 == dimensions)
            {
                var result = new List <T[]>();

                foreach (var value in nodes.SelectMany(x => x.Values))
                {
                    var thisDimResult = new T[dimensions];
                    thisDimResult[dimension] = value;
                    result.Add(thisDimResult);
                }

                return(result);
            }
            else
            {
                var result = new List <T[]>();

                foreach (var node in nodes)
                {
                    var nextDimResult = getInRange(node.tree, start, end, dimension + 1);

                    foreach (var value in node.Values)
                    {
                        foreach (var nextResult in nextDimResult)
                        {
                            nextResult[dimension] = value;
                            result.Add(nextResult);
                        }
                    }
                }

                return(result);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// recursively visit node and return points within given range
        /// </summary>
        /// <param name="currentTree"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="dimension"></param>
        /// <returns></returns>
        private List <T[]> GetInRange(
            RangeTree <T> currentTree,
            T[] start, T[] end, int dimension)
        {
            var nodes = currentTree.GetInRange(start[dimension], end[dimension]);

            if (dimension + 1 == dimensions)
            {
                var result = new List <T[]>();

                foreach (var node in nodes)
                {
                    var thisDimResult = new T[dimensions];
                    thisDimResult[dimension] = node.Data;
                    result.Add(thisDimResult);
                }

                return(result);
            }
            else
            {
                var result = new List <T[]>();

                foreach (var node in nodes)
                {
                    var nextDimResult = GetInRange(node.tree, start, end, dimension + 1);

                    foreach (var nextResult in nextDimResult)
                    {
                        nextResult[dimension] = node.Data;
                        result.Add(nextResult);
                    }
                }

                return(result);
            }
        }