예제 #1
0
        public MatrixCreatrix(Vector2 start, Vector2 end, IEnumerable <Tuple <Vector2, Vector2> > roads)
        {
            IEnumerable <Tuple <Vector2, Vector2> > RoadsRange;
            Double distance = Dist.get_dist(start, end);

            RoadsRange = InRange(distance, roads, start, end);
            int q = 0;

            foreach (var i in RoadsRange)
            {
                q++;
                graph.AddNode(i);
            }
            Console.WriteLine(q);
            foreach (var i in RoadsRange)
            {
                foreach (var j in RoadsRange)
                {
                    if (i != j)
                    {
                        if (i.Item2 == j.Item1)
                        {
                            graph.AddConnection(i, j, GetDistDing(j.Item2, end));
                        }
                    }
                }
            }
            Dijkstur dk = new Dijkstur(graph, start);

            dk.hurrdurr(graph, start);
            pleasework = dk.GetDatList();
        }
예제 #2
0
        static void mergeSort(Vector2[] number, int low, int mid, int high, Vector2 house)
        {
            Vector2[] temp = new Vector2[50];
            int       i, pos, l_end, h;

            pos   = low;
            l_end = (mid - 1);
            h     = (high - low + 1);

            while ((low <= l_end) && (mid <= high))
            {
                if (Dist.get_dist(number[low], house) <= Dist.get_dist(number[mid], house))
                {
                    temp[pos++] = number[low++];
                }
                else
                {
                    temp[pos++] = number[mid++];
                }
            }

            while (low <= l_end)
            {
                temp[pos++] = number[low++];
            }
            while (mid <= high)
            {
                temp[pos++] = number[mid++];
            }
            for (i = 0; i < h; i++)
            {
                number[high] = temp[high];
                high--;
            }
        }
예제 #3
0
        public bool InRange(Tuple <Vector2, float> house, Node node)
        {
            double range = Dist.get_dist(house.Item1, node.Vec2);

            if (range < house.Item2)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #4
0
        public IEnumerable <Tuple <Vector2, Vector2> > InRange(Double dist, IEnumerable <Tuple <Vector2, Vector2> > roads, Vector2 start, Vector2 end)
        {
            IEnumerable <Tuple <Vector2, Vector2> > RoadsInRange;
            var roadlist = new List <Tuple <Vector2, Vector2> >();

            foreach (var i in roads)
            {
                if (Dist.get_dist(i.Item1, start) < dist && Dist.get_dist(i.Item2, end) < dist || Dist.get_dist(i.Item2, start) < dist && Dist.get_dist(i.Item2, end) < dist)
                {
                    roadlist.Add(i);
                }
            }
            RoadsInRange = roadlist;
            return(RoadsInRange);
        }
예제 #5
0
 public double GetDistDing(Vector2 start, Vector2 end)
 {
     return(Dist.get_dist(start, end));
 }