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; } }
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); } }
/// <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); }
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); }
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); } }
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); }