Ejemplo n.º 1
0
        private void knearest(KQueue _priQueue, Vector3 point, Point p, int depth)
        {
            if (p == null)
            {
                return;
            }
            var axis       = depth % 3;
            var distOnAxis = points[p.mid].pos[axis] - point[axis];

            if (distOnAxis > 0)
            {
                knearest(_priQueue, point, p.smaller, depth + 1);
                var sqDist2leaf = sqDist(point, _priQueue.head().ipos);
                if (sqDist2leaf > distOnAxis * distOnAxis)
                {
                    knearest(_priQueue, point, p.larger, depth + 1);
                }
            }
            else
            {
                knearest(_priQueue, point, p.larger, depth + 1);
                var sqDist2leaf = sqDist(point, _priQueue.head().ipos);
                if (sqDist2leaf > distOnAxis * distOnAxis)
                {
                    knearest(_priQueue, point, p.smaller, depth + 1);
                }
            }
            _priQueue.enqueue(new PriorityPoint(p.mid, sqDist(point, p.mid)));
        }
Ejemplo n.º 2
0
 public int[] knearest(KQueue _priQueue, Vector3 point, int k)
 {
     _priQueue.reset();
     _priQueue.resize(k);
     _priQueue.enqueue(new PriorityPoint(-1, float.PositiveInfinity));
     knearest(_priQueue, point, _root, 0);
     return((from node in _priQueue.Reverse() where node.ipos >= 0 select points[node.ipos].id).ToArray());
 }
Ejemplo n.º 3
0
        public ConsoleImpl(IConsoleHandler a_handler, ConsoleData a_data)
        {
            CommandLookup = new ConsoleCommandLookup(a_data.MaxCommands);
            s_Handler     = a_handler;

            s_ConsoleHistory = new KQueue <LogData>(a_data.MaxHistory);
            s_CommandHistory = new KQueue <ICommand>(a_data.MaxHistory);
            s_MaxHistory     = a_data.MaxHistory;
        }