public LinikaWzgledna PobierzLinikeWzgledną() { int M = MinimumInterpolowane(); LinikaWzgledna lkw = new LinikaWzgledna(); lkw.Y = M; foreach (var item in ListaZZdjeciami) { if (item != null || item.Text == "") { ObszarWzgledny obw = new ObszarWzgledny(); obw.ZajmowanyObszar = item.ObszarInterpolowany; obw.ZajmowanyObszar.Y -= M; if (string.IsNullOrEmpty(item.Text)) { obw.Obszar = item; obw.DodajSybol(item.Tag as string); } else { obw.DodajListeSyboli(item.Text.Split('|')); } lkw.CześciLinijek.Add(obw); } } return(lkw); }
public ObszarWzgledny[] ZNajdźDopoasowanie(LinikaWzgledna lk, float MaksymalnaOdległość) { ObszarWzgledny[] ZNalezione = new ObszarWzgledny[CześciLinijek.Count]; lk.SkalujDo(this); int Index = 0; foreach (var item in CześciLinijek) { float OdległośćMin = float.MaxValue; ObszarWzgledny Wartość = null; foreach (var item2 in lk.CześciLinijek) { float Odległość = Math.Abs(item2.ZajmowanyObszar.X - item.ZajmowanyObszar.X); if (Odległość < OdległośćMin) { OdległośćMin = Odległość; Wartość = item2; } } if (OdległośćMin < MaksymalnaOdległość) { ZNalezione[Index++] = Wartość; } } return(ZNalezione); }
public string[] UstalOdpowiednie(ObszarWzgledny[] ZNalezione, Dictionary <string, int> TabelaZamian) { int Index = 0; string[] zw = new string[ZNalezione.Length]; foreach (ObszarWzgledny item in CześciLinijek) { ObszarWzgledny ObszarPrzeglądany = ZNalezione[Index]; if (ObszarPrzeglądany == null) { Index++; continue; } if (item.SprawdźSybol(ObszarPrzeglądany.Pierwszy())) { zw[Index] = ObszarPrzeglądany.Pierwszy(); } else { float NajlepszeDopasowanie = float.MaxValue; string s = ""; ZdjecieZPozycją Zp = ObszarPrzeglądany.Obszar; if (Zp.TablicaOdległościOdWzorców != null) { foreach (var i in item.Litery) { string item2 = i; if (item2 == null || item2 == "błąd") { continue; } if (item2 == "0") { item2 = "O"; } float Wartość = Zp.TablicaOdległościOdWzorców[TabelaZamian[item2]]; if (Wartość < NajlepszeDopasowanie) { NajlepszeDopasowanie = Wartość; s = item2; } } if (NajlepszeDopasowanie < DopuszczalnyBłądOdejsciaOdLitery) { zw[Index] = s; } } } Index++; } return(zw); }
private void SkalujDo(LinikaWzgledna linikaWzgledna) { ObszarWzgledny PierwszyWzorca = linikaWzgledna.CześciLinijek.First(); ObszarWzgledny OstatniWzorca = linikaWzgledna.CześciLinijek.Last(); int MaxWzorca = OstatniWzorca.ZajmowanyObszar.X + OstatniWzorca.ZajmowanyObszar.Width, MinWzorca = PierwszyWzorca.ZajmowanyObszar.X, WielkośćWzorca = MaxWzorca - MinWzorca; ObszarWzgledny Pierwszy = CześciLinijek.First(); ObszarWzgledny Ostatni = CześciLinijek.Last(); int Max = Ostatni.ZajmowanyObszar.X + Ostatni.ZajmowanyObszar.Width, Min = Pierwszy.ZajmowanyObszar.X, Wielkość = Max - Min; float Skaler = WielkośćWzorca / ((float)Wielkość); foreach (var item in CześciLinijek) { item.ZajmowanyObszar.X = (int)(Skaler * (item.ZajmowanyObszar.X - Min)) + MinWzorca; } }
public bool WRelacji(int D, ObszarWzgledny Linika) { if (Math.Abs(MiejsceX - Linika.MiejsceX) > D) { return(false); } foreach (var item in Linika.SymbolePasujące) { if (SymbolePasujące.Contains(item)) { return(true); } } return(false); }
public float WynaczPodobieństwo(LinikaWzgledna lk) { float PodobieństwoLinijek = 0; int MinWPetli = 0; foreach (var item in CześciLinijek) { float MaksymalnePodobieństwo = 0; //foreach (var item2 in lk.CześciLinijek) //{ // if (item.SymbolePasujące.Contains(item2.Pierwszy())) // { // float Podobieństwo = Matematyka.Podobieństwo(item2.ZajmowanyObszar, item.ZajmowanyObszar); // if (Podobieństwo > MaksymalnePodobieństwo) MaksymalnePodobieństwo = Podobieństwo; // } //} for (int i = MinWPetli; i < lk.CześciLinijek.Count; i++) { ObszarWzgledny item2 = lk.CześciLinijek[i]; if (item.ZajmowanyObszar.X > item2.ZajmowanyObszar.Right) { MinWPetli = i + 1; continue; } if (item.ZajmowanyObszar.Right < item2.ZajmowanyObszar.X) { break; } if (item.SprawdźSybol(item2.Pierwszy())) { float Podobieństwo = Matematyka.Podobieństwo(item2.ZajmowanyObszar, item.ZajmowanyObszar); #if DEBUG if (Podobieństwo > 1) { throw new NotImplementedException("podobieństwo jest zbyt wielkie"); } #endif if (Podobieństwo > MaksymalnePodobieństwo) { MaksymalnePodobieństwo = Podobieństwo; } } } PodobieństwoLinijek += MaksymalnePodobieństwo; } return(PodobieństwoLinijek); }
public float Odległość(ObszarWzgledny Linika) { int V = MiejsceX - Linika.MiejsceX; float zw = (float)Math.Sqrt(V * V); float MinOdległośćLitery = float.MaxValue; foreach (var item in Linika.SymbolePasujące) { if (SymbolePasujące.Contains(item)) { float Odległość = Linika.DzienikOdległości[item]; if (Odległość < MinOdległośćLitery) { MinOdległośćLitery = Odległość; } } } if (MinOdległośćLitery > 1000000) { throw new NotImplementedException(); } return(MinOdległośćLitery + zw); }
public object Clone() { ObszarWzgledny o = (ObszarWzgledny)MemberwiseClone(); return(o); }