Пример #1
0
        /// <summary>
        /// Rysuje jedno połączenie na dendrogramie.
        /// </summary>
        /// <param name="połączenie">Struktura gdzie jest napisane odkąd dokąd i w którym miejscu.</param>
        public void RysujPołączenie(JednoPołączenie połączenie)
        {
            for (int i = dendrogram.Count; i < połączenie.PoziomZagłębienia; ++i)
            {
                dendrogram.Add(new List <GrupaNaLiście>());
            }

            double x1, x2, x3, y1, y2;

            if (połączenie.PoziomZagłębienia == 0)
            {
                x1 = połączenie.PoziomZagłębienia * odległośćMiędzyGrupamiNaOsiX + początekWykresuOdLewej;
                x2 = x1 + odległośćMiędzyGrupamiNaOsiX;
                x3 = x1;
                y1 = początekWykresuOdGóry + połączenie.IndeksOd * odległośćMiędzyPunktamiNaOsiY + rozdzielenieKlastrów;
                y2 = początekWykresuOdGóry + (połączenie.IndeksDo + 1) * odległośćMiędzyPunktamiNaOsiY - rozdzielenieKlastrów;
            }
            else
            {
                GrupaNaLiście grupa1 = ZnajdźGrupęPierwszą(połączenie);
                GrupaNaLiście grupa2 = ZnajdźGrupęDrugą(połączenie);

                x1 = (grupa1.Poziom + 1) * odległośćMiędzyGrupamiNaOsiX + początekWykresuOdLewej;
                x3 = (grupa2.Poziom + 1) * odległośćMiędzyGrupamiNaOsiX + początekWykresuOdLewej;
                x2 = (połączenie.PoziomZagłębienia + 1) * odległośćMiędzyGrupamiNaOsiX + początekWykresuOdLewej;
                y1 = (grupa1.MiejsceOd + grupa1.MiejsceDo) / 2;
                y2 = (grupa2.MiejsceOd + grupa2.MiejsceDo) / 2;;
            }

            RysujLinięTąUGóry(x1, x2, y1);
            RysujLinięTąZGóryNaDół(x2, y1, y2);
            RysujLinięTąNaDole(x3, x2, y2);

            UmieśćPołączenieNaLiście(połączenie, y1, y2);
        }
Пример #2
0
 private GrupaNaLiście ZnajdźGrupęPierwszą(JednoPołączenie połączenie)
 {
     for (int i = połączenie.PoziomZagłębienia - 1; i >= 0; --i)
     {
         for (int j = 0; j < dendrogram[i].Count; ++j)
         {
             if (dendrogram[i][j].IndeksOd == połączenie.IndeksOd)
             {
                 return(dendrogram[i][j]);
             }
         }
     }
     throw new ApplicationException();
 }
Пример #3
0
 /// <summary>
 /// Umieszcza połączenie na liście aby kolejne połączenia mogły na podstawie tego wyliczyć
 /// gdzie mają się narysować.
 /// </summary>
 /// <param name="połączenie"></param>
 private void UmieśćPołączenieNaLiście(JednoPołączenie połączenie, double y1, double y2)
 {
     if (połączenie.PoziomZagłębienia > dendrogram.Count - 1)
     {
         for (int i = dendrogram.Count; i <= połączenie.PoziomZagłębienia; ++i)
         {
             dendrogram.Add(new List <GrupaNaLiście>());
         }
     }
     dendrogram[połączenie.PoziomZagłębienia].Add(new GrupaNaLiście
     {
         IndeksOd  = połączenie.IndeksOd,
         IndeksDo  = połączenie.IndeksDo,
         MiejsceOd = y1,
         MiejsceDo = y2,
         Poziom    = połączenie.PoziomZagłębienia
     });
 }