コード例 #1
0
        public void PosNodo(ref int x, int y)
        {
            int aux1, aux2;

            CoordenadaY = (int)(y + Radio / 2);

            if (HijoIzquierdo != null)
            {
                HijoIzquierdo.PosNodo(ref x, y + Radio + DistanciaV);
                if (y + Radio + DistanciaV > Logica.altura)
                {
                    Logica.altura = y + Radio + DistanciaV;
                }
            }

            if (HijoIzquierdo != null && HijoDerecho != null)
            {
                x += DistanciaH;
            }

            if (HijoDerecho != null)
            {
                HijoDerecho.PosNodo(ref x, y + Radio + DistanciaV);
                if (y + Radio + DistanciaV > Logica.altura)
                {
                    Logica.altura = y + Radio + DistanciaV;
                }
            }

            if (HijoIzquierdo != null && HijoDerecho != null)
            {
                CoordenadaX = (int)((HijoIzquierdo.CoordenadaX + HijoDerecho.CoordenadaX) / 2);
            }
            else if (HijoIzquierdo != null)
            {
                aux1 = HijoIzquierdo.CoordenadaX;
                HijoIzquierdo.CoordenadaX = CoordenadaX - 80;
                CoordenadaX = aux1;
            }
            else if (HijoDerecho != null)
            {
                aux2 = HijoDerecho.CoordenadaX;
                HijoDerecho.CoordenadaX = CoordenadaX + 80;
                CoordenadaX             = aux2;
            }
            else
            {
                CoordenadaX = (int)(x + Radio / 2);
                x          += Radio;
            }
        }
コード例 #2
0
        public void MostrarRamas(Graphics grafo, Pen lapiz)
        {
            if (HijoIzquierdo != null)
            {
                grafo.DrawLine(lapiz, CoordenadaX, CoordenadaY, HijoIzquierdo.CoordenadaX, HijoIzquierdo.CoordenadaY);
                HijoIzquierdo.MostrarRamas(grafo, lapiz);
            }

            if (HijoDerecho != null)
            {
                grafo.DrawLine(lapiz, CoordenadaX, CoordenadaY, HijoDerecho.CoordenadaX, HijoDerecho.CoordenadaY);
                HijoDerecho.MostrarRamas(grafo, lapiz);
            }
        }
コード例 #3
0
        /// <summary>
        /// Recorro en preorden el arbol
        /// </summary>
        /// <param name="lista"></param>
        /// <returns></returns>
        public List <string> PrintHojas(List <string> lista)
        {
            List <string> listadoHojas = lista;

            if (EsHoja())
            {
                Dictionary <string, int> etiquetas = (Dictionary <string, int>)Dato;
                foreach (var hoja in etiquetas)
                {
                    listadoHojas.Add(hoja.Key);
                }
            }
            else
            {
                HijoIzquierdo.PrintHojas(listadoHojas);
                HijoDerecho.PrintHojas(listadoHojas);
            }
            return(listadoHojas);
        }
コード例 #4
0
        public Dictionary <string, int> ProbabilidadPrediccion()
        {
            Dictionary <string, int> listadoHojas = new Dictionary <string, int>();

            if (EsHoja())
            {
                Dictionary <string, int> etiquetas = (Dictionary <string, int>)Dato;
                foreach (var hoja in etiquetas)
                {
                    Console.WriteLine("Probabilidad de predicción: {0} - seguridad: {1}%", hoja.Key, ((hoja.Value * 100) / etiquetas.Count));
                }
            }
            else
            {
                HijoIzquierdo.ProbabilidadPrediccion();
                HijoDerecho.ProbabilidadPrediccion();
            }
            return(listadoHojas);
        }
コード例 #5
0
        public void MostrarNodo(Graphics grafo, Font fuente, Brush relleno, Brush rellenoFuente, Pen lapiz, Brush encuentro)
        {
            var rect = new Rectangle((int)(CoordenadaX - Radio / 2), (int)(CoordenadaY - Radio / 2), Radio, Radio);

            grafo.FillEllipse(encuentro, rect);
            grafo.FillEllipse(relleno, rect);
            grafo.DrawEllipse(lapiz, rect);

            var formato = new StringFormat();

            formato.Alignment     = StringAlignment.Center;
            formato.LineAlignment = StringAlignment.Center;
            grafo.DrawString(simbolo, fuente, rellenoFuente, CoordenadaX, CoordenadaY, formato);

            if (HijoIzquierdo != null)
            {
                HijoIzquierdo.MostrarNodo(grafo, fuente, relleno, rellenoFuente, lapiz, encuentro);
            }
            if (HijoDerecho != null)
            {
                HijoDerecho.MostrarNodo(grafo, fuente, relleno, rellenoFuente, lapiz, encuentro);
            }
        }
コード例 #6
0
        public Image Draw(out int Centro)
        {
            Centro = _InicioImagenNodo;
            if (!EsCambio)
            {
                return(_Imagen);
            }
            var   IzquierdaCentro = 0;
            var   DerechaCentro = 0;
            Image IzquierdaNodoImg = null, DerechaNodoImg = null;

            if (HijoIzquierdo != null)
            {
                IzquierdaNodoImg = HijoIzquierdo.Draw(out IzquierdaCentro);
            }
            if (HijoDerecho != null)
            {
                DerechaNodoImg = HijoDerecho.Draw(out DerechaCentro);
            }
            var izquierdaSize = new Size();
            var DerechaSize   = new Size();
            var under = (IzquierdaNodoImg != null) || (DerechaNodoImg != null);

            if (IzquierdaNodoImg != null)
            {
                izquierdaSize = IzquierdaNodoImg.Size;
            }
            if (DerechaNodoImg != null)
            {
                DerechaSize = DerechaNodoImg.Size;
            }
            var maxHigh = izquierdaSize.Height;

            if (maxHigh < DerechaSize.Height)
            {
                maxHigh = DerechaSize.Height;
            }
            if (izquierdaSize.Width <= 0)
            {
                izquierdaSize.Width = (_NodoBolsa.Width - _LiberarEspacio.Width) / 2;
            }
            if (DerechaSize.Width <= 0)
            {
                DerechaSize.Width = (_NodoBolsa.Width - _LiberarEspacio.Width) / 2;
            }
            var resize = new Size
            {
                Width  = izquierdaSize.Width + DerechaSize.Width + _LiberarEspacio.Width,
                Height = _NodoBolsa.Size.Height + (under ? maxHigh + _LiberarEspacio.Height : 0)
            };
            var ArbolTotal = new Bitmap(resize.Width, resize.Height);
            var g          = Graphics.FromImage(ArbolTotal);

            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.FillRectangle(Brushes.Black, new Rectangle(new Point(0, 0), resize));
            var str = Dato.ToString();

            g.DrawImage(_NodoBolsa, izquierdaSize.Width - _NodoBolsa.Width / 2 + _LiberarEspacio.Width / 2 + (2 + (str.Length == 1 ? 10 : str.Length == 2 ? 5 : 0)) * Coef, _NodoBolsa.Height / 2f - 12 * Coef);

            Centro = izquierdaSize.Width + (_LiberarEspacio.Width / 2);
            var pen = new Pen(Brushes.White, 1.0f * Coef)
            {
                EndCap   = System.Drawing.Drawing2D.LineCap.ArrowAnchor,
                StartCap = System.Drawing.Drawing2D.LineCap.Round
            };
            float x1 = Centro;
            float y1 = _NodoBolsa.Height;
            float y2 = _NodoBolsa.Height + _LiberarEspacio.Height;
            float x2 = IzquierdaCentro;
            var   h  = Math.Abs(y2 - y1);
            var   w  = Math.Abs(x2 - x1);

            if (IzquierdaNodoImg != null)
            {
                g.DrawImage(IzquierdaNodoImg, 0, _NodoBolsa.Size.Height + _LiberarEspacio.Height);
                var points1 = new List <PointF>
                {
                    new PointF(x1, y1),
                    new PointF(x1 - w / 6, y1 + h / 3.0f),
                    new PointF(x2 - w / 6, y1 + h / 3.0f),
                    new PointF(x2, y2),
                };
                g.DrawCurve(pen, points1.ToArray(), 0.1f);
            }
            if (DerechaNodoImg != null)
            {
                g.DrawImage(DerechaNodoImg, izquierdaSize.Width + _LiberarEspacio.Width, _NodoBolsa.Size.Height + _LiberarEspacio.Height);
                x2 = DerechaCentro + izquierdaSize.Width + _LiberarEspacio.Width;
                w  = Math.Abs(x2 - x1);
                var points2 = new List <PointF>
                {
                    new PointF(x1, y1),
                    new PointF(x1 - w / 6, y1 + h / 3.0f),
                    new PointF(x2 - w / 6, y1 + h / 3.0f),
                    new PointF(x2, y2),
                };
                g.DrawCurve(pen, points2.ToArray(), 0.1f);
            }
            EsCambio          = false;
            _Imagen           = ArbolTotal;
            _InicioImagenNodo = Centro;
            return(ArbolTotal);
        }