示例#1
0
        static Point secondnearstpoints(Point p, RBush <Point> pointset)
        {
            q.Clear();
            var node = pointset.data;
            FastPriorityQueueNode pre = new FastPriorityQueueNode();

            pre.Priority = float.PositiveInfinity;
            int pindex = 0;

            //int end = points.Length - 1;
            while (true)
            {
                if (node.leaf)
                {
                    for (int i = 0; i < node.elements.Count; i++)
                    {
                        float d = Point.distence(p, node.elements[i]);
                        if (d != 0)
                        {
                            q.Enqueue(node.elements[i], d);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < node.children.Count; i++)
                    {
                        q.Enqueue(node.children[i], (float)boxDist(p, node.children[i]));
                    }
                }
                var curr = q.Dequeue();

                if (!curr.element)
                {
                    node = curr as node <Point>;
                }
                else
                {
                    var p2 = curr as Point;
                    if (pindex > 0)
                    {
                        return(p2);
                    }
                    else
                    {
                        pindex++;
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// GlobalSetup
        /// </summary>
        public void GlobalSetup()
        {
            Queue                  = new FastPriorityQueue <FastPriorityQueueNode>(QueueSize);
            Nodes                  = new FastPriorityQueueNode[QueueSize];
            RandomPriorities       = new int[QueueSize];
            RandomUpdatePriorities = new int[QueueSize];
            Random rand = new Random(34829061);

            for (int i = 0; i < QueueSize; i++)
            {
                Nodes[i]                  = new FastPriorityQueueNode();
                RandomPriorities[i]       = rand.Next(16777216); // constrain to range float can hold with no rounding
                RandomUpdatePriorities[i] = rand.Next(16777216); // constrain to range float can hold with no rounding
            }
        }
示例#3
0
        static Point nearstpoint(Point p, RBush <Point> pointset)
        {
            q.Clear();
            var node = pointset.data;
            FastPriorityQueueNode pre = new FastPriorityQueueNode();

            pre.Priority = float.PositiveInfinity;
            while (true)
            {
                if (node.leaf)
                {
                    for (int i = 0; i < node.elements.Count; i++)
                    {
                        float d = Point.distence(p, node.elements[i]);
                        if (d != 0)
                        {
                            q.Enqueue(node.elements[i], d);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < node.children.Count; i++)
                    {
                        q.Enqueue(node.children[i], (float)boxDist(p, node.children[i]));
                    }
                }
                var curr = q.Dequeue();

                if (!curr.element)
                {
                    node = curr as node <Point>;
                }
                else
                {
                    //if(constrainlist!=null&&!constrainlist.Contains(curr as Point))
                    return(curr as Point);
                }
            }
        }