/// <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); }
/// <summary> /// Vypočítá vzdálenost dvou bodů /// </summary> /// <param name="bod1">První bod</param> /// <param name="bod2">Druhý bod</param> /// <returns></returns> public static int VypoctiVzdalenost(Bod bod1, Bod bod2) { //Kontrola jestli body existují if (bod1 == null || bod2 == null) { return(-1); } //Vzorec na výpočet vzdálenost dvou 2D bodů int vzdalenost = (int)Math.Sqrt(Math.Pow(bod2.X - bod1.X, 2) + Math.Pow(bod2.Y - bod1.Y, 2)); return(vzdalenost); }
/// <summary> /// Vytvoří jednoprvkový shluk. /// </summary> /// <param name="bod">Shluk pro vytvoření potřebuje alespoň jeden prvek který pak bude obsahovat</param> /// <param name="id">Každý shluk má svoje unikátní id. Ikdyž se nekontroluje jestli je unikátní</param> /// <param name="rnd">Každý shluk má svoji barvu. Ta se vytváří náhodně a potřebuje proto poskytnout třídu random</param> public Shluk(Bod bod, int id, Random rnd) { barva = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255)); body.Add(bod); this.id = id; }