private static unsafe ProstokątNaObrazie ZnajdźSkrajnePunktuObrazu2(bool *Obraz, int x, int y, HashSet <ObiektNaMapie> tr) { ProstokątNaObrazie zwr = new ProstokątNaObrazie(); { ObiektNaMapie PomocniczyObiekt = new ObiektNaMapie(); foreach (var item in tr) { SprawdźSkrajne(new Point(item.MinX, item.MinY), ref PomocniczyObiekt); SprawdźSkrajne(new Point(item.MaxX, item.MaxY), ref PomocniczyObiekt); } zwr.Początek = new Point(PomocniczyObiekt.MinX, PomocniczyObiekt.MinY); zwr.Koniec = new Point(PomocniczyObiekt.MaxX, PomocniczyObiekt.MaxY); List <Point> ListaOdległośi = new List <Point>(); Point Sierodek = zwr.Początek.Dodaj(zwr.Koniec).Razy(0.5f); ListaOdległośi.Add(Sierodek); ListaOdległośi.Add(ZnajdźNajdalszyPunkt(zwr, Obraz, x, y, ListaOdległośi)); ListaOdległośi.Add(ZnajdźNajdalszyPunkt(zwr, Obraz, x, y, ListaOdległośi)); ListaOdległośi.Add(ZnajdźNajdalszyPunkt(zwr, Obraz, x, y, ListaOdległośi)); ListaOdległośi.Add(ZnajdźNajdalszyPunkt(zwr, Obraz, x, y, ListaOdległośi)); zwr.XNYN = ListaOdległośi[1]; ListaOdległośi.RemoveRange(0, 2); int L = ZnajdźNajdalszyKąt(ListaOdległośi, zwr.XNYN, Sierodek); zwr.XPYP = ListaOdległośi[L]; ListaOdległośi.RemoveAt(L); zwr.XNYP = ListaOdległośi[0]; zwr.XPYN = ListaOdległośi[1]; } zwr.Ustaw(new Size(x, y)); return(zwr); }
public static unsafe ProstokątNaObrazie KorektaHauga(Size Rozmiar, bool *Obraz, ProstokątNaObrazie pk) { Haug h = new Haug(); ProstokątNaObrazie pr = new ProstokątNaObrazie(); pr.XNYN = h.ZnajdźProstopadłe(Obraz, Rozmiar, ZnajdźObszarOtaczający(pk.XNYN, Rozmiar, pk.ŚredniaDłógośc())); pr.XNYP = h.ZnajdźProstopadłe(Obraz, Rozmiar, ZnajdźObszarOtaczający(pk.XNYP, Rozmiar, pk.ŚredniaDłógośc())); pr.XPYN = h.ZnajdźProstopadłe(Obraz, Rozmiar, ZnajdźObszarOtaczający(pk.XPYN, Rozmiar, pk.ŚredniaDłógośc())); pr.XPYP = h.ZnajdźProstopadłe(Obraz, Rozmiar, ZnajdźObszarOtaczający(pk.XPYP, Rozmiar, pk.ŚredniaDłógośc())); pr.Ustaw(Rozmiar); return(pr); }