示例#1
0
        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);
        }
        private void ZlepiajLitere(Graf <int> item)
        {
            List <int> P1, P2;
            float      ŚredniaWielkość = ObliczŚredniąWIelkość(item);

            item.ZnajdźPołączenia(out P1, out P2);
            if (P1.Count > 6)
            {
                return;
            }
            int   IlośćMożlwiości        = 1 << P1.Count;
            int   Stan                   = IlośćMożlwiości - 1;
            float NajwiekszePodobieństwo = int.MaxValue;
            List <ZdjecieZPozycją> NajlepiejDopasowane = new List <ZdjecieZPozycją>();

            for (int i = 0; i < IlośćMożlwiości; i++)
            {
                UstawGraf(P1, P2, Stan, i, item);
                item.CzyśćZaznaczenia();
                List <ZdjecieZPozycją> z = new List <ZdjecieZPozycją>();
                foreach (var SpójneObszary in item.ZnajdźObszary())
                {
                    z.Add(PobierzZdjecie(SpójneObszary));
                }
                double Podobieństwo;
                if (ŚredniaWielkość == 0)
                {
                    Podobieństwo = z.Average(d => d.NajbliszePodobieństwo);
                }
                else
                {
                    Podobieństwo = z.Average(d => d.NajbliszePodobieństwo / Matematyka.Podobność(ŚredniaWielkość, d.Obszar.Wielkośc()));
                }
                if (Podobieństwo < NajwiekszePodobieństwo)
                {
                    NajwiekszePodobieństwo = (float)Podobieństwo;
                    NajlepiejDopasowane    = z;
                }



                Stan = i;
            }
            foreach (var item2 in item.Listuj())
            {
                PaczkaGrafu pk = PaczkiDoGrafu[item2];
                pk.LinikaDoKrótrejNajlerzy.ListaZZdjeciami.Remove(pk.zp);
            }
            foreach (var item2 in NajlepiejDopasowane)
            {
                Liniki[0].Add(item2);
                item2.IlośćSąsiadów = item.Wielkość - 1;
            }
            item.Zaznacz();
        }