예제 #1
0
        public void CreateKdtree(KdTree tree, IList <Obstacle> obslist)
        {
            treenodes.Clear();
            obstacles.Clear();

            Dictionary <int, KdtreeObstacle> dic = new Dictionary <int, KdtreeObstacle>();

            for (int i = 0; i < obslist.Count; ++i)
            {
                Obstacle obs = obslist[i];

                KdtreeObstacle kdobs = new KdtreeObstacle();
                kdobs.convex_    = obs.convex_;
                kdobs.id_        = obs.id_;
                kdobs.point_     = obs.point_;
                kdobs.direction_ = obs.direction_;
                kdobs.nextID     = obs.next_.id_;
                kdobs.previousID = obs.previous_.id_;
                obstacles.Add(kdobs);

                dic[obs.id_] = kdobs;
            }


            obstacleTree_ = AssignTreeNode(tree.obstacleTree_, dic);

            //LogMgr.Log("dic "+ dic.Count);
        }
예제 #2
0
        private Obstacle CreateObstacle(KdtreeObstacle obs, Dictionary <int, KdtreeObstacle> dic, Dictionary <int, Obstacle> obsdic)
        {
            if (obs != null)
            {
                Obstacle target = new Obstacle();
                target.id_      = obs.id_;
                obsdic[obs.id_] = target;

                if (obs.nextID != -1)
                {
                    if (obsdic.ContainsKey(obs.nextID))
                    {
                        target.next_ = obsdic[obs.nextID];
                    }
                    else
                    {
                        target.next_ = CreateObstacle(dic[obs.nextID], dic, obsdic);
                    }
                }
                else
                {
                    target.next_ = null;
                }


                if (obs.previousID != -1)
                {
                    if (obsdic.ContainsKey(obs.previousID))
                    {
                        target.previous_ = obsdic[obs.previousID];
                    }
                    else
                    {
                        target.previous_ = CreateObstacle(dic[obs.previousID], dic, obsdic);
                    }
                }
                else
                {
                    target.previous_ = null;
                }

                target.direction_ = obs.direction_;
                target.point_     = obs.point_;
                target.convex_    = obs.convex_;
                return(target);
            }

            return(null);
        }