public bool Sąsiedztwo(ZdjecieZPozycją zp) { int X = Matematyka.Styczność2Obiektów(Obszar.X, Obszar.X + Obszar.Width, zp.Obszar.X, zp.Obszar.X + zp.Obszar.Width); int Y = Matematyka.Styczność2Obiektów(Obszar.Y, Obszar.Y + Obszar.Height, zp.Obszar.Y, zp.Obszar.Y + zp.Obszar.Height); return(X > NajbliszaOdległośćSąsiada && Y > NajbliszaOdległośćSąsiada); }
private List <ZdjecieZPozycją> ZnajdźBliskoSiebie() { Graf <ZdjecieZPozycją> o = new Graf <ZdjecieZPozycją>(); o.UstalWielkośćGrafu(ListaZZdjeciami.Count, ListaZZdjeciami.ToArray()); for (int i = 0; i < ListaZZdjeciami.Count; i++) { for (int j = i + 1; j < ListaZZdjeciami.Count; j++) { Rectangle a = ListaZZdjeciami[i].Obszar; Rectangle b = ListaZZdjeciami[j].Obszar; if (Matematyka.Styczność2Obiektów(a.Left, a.Right, b.Left, b.Right) > MaxymalnaDopuszczalnaOdległość || Matematyka.Podobność(a.Height, b.Height) > MinimalnePodobieństwoY) { o.PołączenieDwustrone(ListaZZdjeciami[i], ListaZZdjeciami[j]); } } } int Najwieksze = 0; List <ZdjecieZPozycją> z = null; foreach (List <ZdjecieZPozycją> item in o.ZnajdźObszary()) { if (item.Count > Najwieksze) { Najwieksze = item.Count; z = item; } } return(z); }
public bool SprawdźPodobieństwo(Linika a) { int WielkośćTego = RóżnicaŚrednich(); int WielkośćTamtego = a.RóżnicaŚrednich(); int MniejszaRóźnica = WielkośćTamtego < WielkośćTego ? WielkośćTamtego : WielkośćTego; float fx = Matematyka.Styczność2Obiektów(SredniPoczątekY, SredniKoniecY, a.SredniPoczątekY, a.SredniKoniecY); fx /= MniejszaRóźnica; return(MinPodobieństwoLinijek < fx); }
public void UsuńStycznePoPierszeństwie(List <int> Ekrema, int OdległośćUsuniecia) { for (int i = 0; i < Ekrema.Count; i++) { for (int j = i + 1; j < Ekrema.Count; j++) { if (Matematyka.Styczność2Obiektów(Ekrema[i], Ekrema[i] + OdległośćUsuniecia, Ekrema[j], Ekrema[j] + OdległośćUsuniecia) > -1) { Ekrema.RemoveAt(i--);//ponieważ jest wcześniejszy break; } } } }
public void SpróbujDodać(ZdjecieZPozycją z) { foreach (var item in this) { if (Matematyka.Styczność2Obiektów(item.Obszar.X, item.Obszar.Right, z.Obszar.X, z.Obszar.Right) < PrógPodobności) { return; } } int PrógZTego = (int)(MinimalnaPodobność * z.Obszar.Width); if (PrógPodobności < PrógZTego) { PrógPodobności = PrógZTego; } SumaPodobności += z.NajbliszePodobieństwo; Add(z); }
public void UsuńStycznePoWartościach(int[] Tb, List <int> Ekrema, int OdległośćUsuniecia) { for (int i = 0; i < Ekrema.Count; i++) { for (int j = i + 1; j < Ekrema.Count; j++) { if (Matematyka.Styczność2Obiektów(Ekrema[i], Ekrema[i] + OdległośćUsuniecia, Ekrema[j], Ekrema[j] + OdległośćUsuniecia) > -1) { if (Tb[i] < Tb[j]) { Ekrema.RemoveAt(i--);//ponieważ jest wcześniejszy break; } else { Ekrema.RemoveAt(j--); continue; } } } } }
public void UsuńSzum() { float SredniaWielkoścPróg = ŚredniaWIelkość() * WielkośćSzumu; double WielkośćY = ListaZZdjeciami.Average(X => X.Obszar.Height) * WielkośćSzumuY; HashSet <ZdjecieZPozycją> DoUsuniecia = new HashSet <ZdjecieZPozycją>(); foreach (var item in ListaZZdjeciami) { if (item.Obszar.Height < WielkośćY && SredniaWielkoścPróg > item.Obszar.Wielkośc()) { foreach (var item2 in ListaZZdjeciami) { if (item != item2 && Matematyka.Styczność2Obiektów(item.Obszar.Left, item.Obszar.Right, item2.Obszar.Left, item.Obszar.Right) > OdalenieDoUsuniecia) { goto Ko; } } DoUsuniecia.Add(item); Ko :; } } ListaZZdjeciami.RemoveAll(X => DoUsuniecia.Contains(X)); }
public float Styczność(Linika l) { int Wielkość = Max - Min; return(((float)Matematyka.Styczność2Obiektów(Min, Max, l.Min, l.Max)) / Wielkość); }