Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
 }
Exemple #6
0
        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);
        }