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); } }
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); }
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); }
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); }
public void UsuńPunkt(Punkt p) { Punky.Remove(p); Przestrzeń.Usuń((PrzetrzeńKolizji.ObiektKolizji o) => { return(o.Tag == p); }); p.ZlikwidujOdniesienia(); }