示例#1
0
 public void DodajPunkt(Punkt p)
 {
     Punky.Add(p);
     Przestrzeń.Dodaj(new PrzetrzeńKolizji.ObiektKolizji(p.Miejsce)
     {
         Tag = p
     });
     foreach (Krawedz item in ZnajdźPoloczenia(p))
     {
         PrzetrzeńKolizji.ObiektKolizji DodawanyOdcinek = new PrzetrzeńKolizji.ObiektKolizji(Vector2.Zero);
         DodawanyOdcinek.Szkielet = item;
         DodajOdcinek(DodawanyOdcinek);
     }
 }
示例#2
0
        private List <Krawedz> ZnajdźPoloczenia(Punkt punkt)
        {
            List <Krawedz> zwracana = new List <Krawedz>();

            foreach (PrzetrzeńKolizji.ObiektKolizji item in Przestrzeń.ZnajdźWsztstkieKolidujące(punkt.Miejsce, punkt.MaksymalneSzukanie))
            {
                Punkt p = item.Tag as Punkt;
                if (p != null && p != punkt)
                {
                    float   odl = (p.Miejsce - punkt.Miejsce).Length();
                    Krawedz kr  = new Krawedz(p, punkt)
                    {
                        DługośćKrawedzi = odl
                    };
                    p.ListaKrawedzi.Add(kr);
                    punkt.ListaKrawedzi.Add(kr);
                    zwracana.Add(kr);
                }
            }
            return(zwracana);
        }
示例#3
0
        public Punkt[] ZnajdźNajkrutszy(Punkt Start, Punkt Meta, out float Dystans, float MaksymalnaOdległość)
        {
            Dystans = -1;

            foreach (Punkt item in Punky)
            {
                item.NajkrutszaOdległośćDoKońca = MaksymalnaOdległość;
            }
            Punkt[] Zwracana = new Punkt[0];
            EventHandlerWolność <Punkt[]> Zdażenie = new EventHandlerWolność <Punkt[]>((object o, Punkt[] p) =>
            {
                Zwracana = p;
            }
                                                                                       );

            Meta.KoniecEvent += Zdażenie;
            Start.ProwadźDo(Meta);
            if (Zwracana.Length != 0)
            {
                Dystans = Meta.NajkrutszaOdległośćDoKońca;
            }
            return(Zwracana);
        }
示例#4
0
        public List <Vector2> WyznaczTrase(Vector2 Poczotek, Vector2 Koniec, out float Dystans, float MaksymalnaOdległość)
        {
            Punkt poczotek = new Punkt()
            {
                Miejsce = Poczotek, Kolejność = KolejnoścWyznaczaniaTrasy == Krawedz.Kolejność.OdRosnocych ? int.MaxValue : int.MinValue, MaksymalneSzukanie = float.MaxValue
            };
            Punkt koniec = new Punkt()
            {
                Miejsce = Koniec, Kolejność = KolejnoścWyznaczaniaTrasy == Krawedz.Kolejność.OdRosnocych ? int.MinValue : int.MaxValue, MaksymalneSzukanie = float.MaxValue
            };

            DodajPunkt(poczotek);
            DodajPunkt(koniec);
            Punkt[]        p = ZnajdźNajkrutszy(poczotek, koniec, out Dystans, MaksymalnaOdległość);
            List <Vector2> v = new List <Vector2>(p.Length);

            foreach (Punkt item in p)
            {
                v.Add(item.Miejsce);
            }
            UsuńPunkt(poczotek);
            UsuńPunkt(koniec);
            return(v);
        }
 public Krawedz(Punkt Poczotek, Punkt Koniec)
 {
     this.PoczotekKrawdzi = Poczotek;
     this.KoniecKrawdzi   = Koniec;
     Add(new Odcinek(Poczotek.Miejsce, Koniec.Miejsce));
 }
 internal Krawedz(Punkt k)
 {
     Aktywny       = true;
     KoniecKrawdzi = k;
 }
        public void ProwadźDo(Punkt Koniec)
        {
            Krawedz k = new Krawedz(this);

            k.Prowadź(Koniec);
        }
示例#8
0
 public void UsuńPunkt(Punkt p)
 {
     Punky.Remove(p);
     Przestrzeń.Usuń((PrzetrzeńKolizji.ObiektKolizji o) => { return(o.Tag == p); });
     p.ZlikwidujOdniesienia();
 }