Example #1
0
        private void button_start_Click(object sender, EventArgs e)
        {
            Shluk shluk1 = null, shluk2 = null;
            int   shlukIndex1 = 0, shlukIndex2 = 0;

            //Cykl se bude opakovat tak dlouho dokud se počet shluků nezredukuje na zadaný počet
            while (shluky.Count != (int)number_final.Value)
            {
                //Kontrola jestli nejsou zadány špatné parametry či cokoliv.
                //Po metodě "shlukuj" se má počet shluků zmenšit.
                //Pokud se nezmenší něco nefunguje a potřeba přerušit program
                int velikostPredShlukem = shluky.Count;     //Velikost před sloučením dvou shluků
                int velikostPoShluku    = 0;

                Shlukuj(shluk1, shluk2, shlukIndex1, shlukIndex2);

                velikostPoShluku = shluky.Count();           //Velikost po sloučení

                if (velikostPoShluku == velikostPredShlukem) //Pokud se velikosti rovnají => něco se posralo
                {
                    break;
                }
            }
            //Poté co je hotovo se překreslí picture box
            canvas.Invalidate();
        }
Example #2
0
        private void Shlukuj(Shluk shluk1, Shluk shluk2, int shlukIndex1, int shlukIndex2)
        {
            //Nalezení dvou nejbližších shluků
            int minimum = 99999;

            for (int i = 0; i < shluky.Count; i++)
            {
                for (int j = 0; j < shluky.Count; j++)
                {
                    if (j == i) //Podmínka aby se nekotroloval shluk sám se sebou
                    {
                        continue;
                    }
                    //Pokud se našel nový nejbližší pár
                    if (Shluk.VzdalenostShluku(shluky[i], shluky[j]) < minimum)
                    {
                        //Uloží se které shluky jsou sobě nejbližší
                        minimum     = Shluk.VzdalenostShluku(shluky[i], shluky[j]);
                        shluk1      = shluky[i];
                        shluk2      = shluky[j];
                        shlukIndex1 = i;
                        shlukIndex2 = j;
                    }
                }
            }

            //Teď mám nalezené dva blízké shluky. Tak je spojím
            shluk1 = Shluk.SpojShluky(shluk1, shluk2);
            shluky[shlukIndex1] = shluk1;
            //ten druhý smažu
            shluky.RemoveAt(shlukIndex2);
        }
Example #3
0
        /// <summary>
        /// Vypočítá vzdálenost dvou shluků. Nejmenší vzdálenost mezi body obou shluků se bere jako vzdálenost dvou shluků.
        /// </summary>
        /// <param name="shluk1">První shluk</param>
        /// <param name="shluk2">Druhý shluk</param>
        /// <returns></returns>
        public static int VzdalenostShluku(Shluk shluk1, Shluk shluk2)
        {
            if (shluk1 == null || shluk2 == null)
            {
                return(-1);
            }

            int nejmensiVzdalenost = 99999;
            int soucasnaVzdalenost = nejmensiVzdalenost;

            for (int i = 0; i < shluk1.body.Count; i++)     //Procházení bodů ze shluku 1
            {
                for (int j = 0; j < shluk2.body.Count; j++) //procházení bodů ze shluku 2
                {
                    //Vypočítá se vzdálenost a popřípadě se uloží
                    soucasnaVzdalenost = Bod.VypoctiVzdalenost(shluk1.body[i], shluk2.body[j]);
                    if (soucasnaVzdalenost < nejmensiVzdalenost)
                    {
                        nejmensiVzdalenost = soucasnaVzdalenost;
                    }
                }
            }

            return(nejmensiVzdalenost);
        }
Example #4
0
 public static Shluk SpojShluky(Shluk shluk1, Shluk shluk2)
 {
     if (shluk1 == null || shluk2 == null)
     {
         return(null);
     }
     for (int i = 0; i < shluk2.PocetBodu(); i++)
     {
         shluk1.body.Add(shluk2.body[i]);
     }
     shluk2 = null;
     return(shluk1);
 }
Example #5
0
 private void button_krok_Click(object sender, EventArgs e)
 {
     if (checkBox_krokovat.Checked)
     {
         Shluk shluk1 = null, shluk2 = null;
         int   shlukIndex1 = 0, shlukIndex2 = 0;
         if (shluky.Count != (int)number_final.Value)
         {
             Shlukuj(shluk1, shluk2, shlukIndex1, shlukIndex2);
         }
         //Poté co je hotovo se překreslí picture box
         canvas.Invalidate();
     }
 }