Vertice VerticeCercano(Point Coordenada) { List <Vertice> lv = G.getLv(); bool PrimerVertice = true; Vertice Cercano = null; foreach (Vertice v in lv) { if (PrimerVertice == true) { Cercano = v; PrimerVertice = false; } else { int DifCercano = Math.Abs(Coordenada.X - Cercano.getX()) + Math.Abs(Coordenada.Y - Cercano.getY()); int DifNuevo = Math.Abs(Coordenada.X - v.getX()) + Math.Abs(Coordenada.Y - v.getY()); if (DifNuevo < DifCercano) { Cercano = v; } } } return(Cercano); }
private void PictureBoxDestino_MouseClick(object sender, MouseEventArgs e) { Point CoordenadaElegido = new Point(e.X, e.Y); Vertice Cercano = VerticeCercano(CoordenadaElegido); Point CoordenadaDestino = new Point(Cercano.getX(), Cercano.getY()); DibujarCirculo(CoordenadaDestino, destino, Animacion); PictureBoxDestino.Refresh(); Destino = Cercano; Thread.Sleep(50); this.Dispose(); }
public EleccionDestino(Grafo grafo, Vertice Origen, Bitmap Fondo) { InitializeComponent(); G = grafo; Rectangle Dimensiones = new Rectangle(0, 0, Fondo.Width, Fondo.Height); System.Drawing.Imaging.PixelFormat Formato = Fondo.PixelFormat; Animacion = Fondo.Clone(Dimensiones, Formato); PictureBoxDestino.BackgroundImage = Fondo; Coordenadas = new Point(Origen.getX(), Origen.getY()); LimpiarBitmap(Animacion, Color.Transparent); DibujarCirculo(Coordenadas, origen, Animacion); PictureBoxDestino.Image = Animacion; MessageBox.Show("Seleccione un Vertice Destino"); }
private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { List <Vertice> Visitados = new List <Vertice>(); Stack <Vertice> Pila = new Stack <Vertice>(); List <Vertice> Posible = new List <Vertice>(); if (CbNumPresas.Text == "" || CbNumDepredadoras.Text == "") { return; } if (ContVertices < int.Parse(CbNumPresas.Text) + int.Parse(CbNumDepredadoras.Text)) { Point Coordenada = new Point(e.X, e.Y); Vertice Cercano = VerticeCercano(Coordenada); if (!Usados.Contains(Cercano)) { if (ContVertices < int.Parse(CbNumPresas.Text)) { Point Punto = new Point(Cercano.getX(), Cercano.getY()); DibujarCirculo(Punto, BrochaPresa, Animacion); pictureBox1.Refresh(); Vertice DestinoElegido = Cercano; do { EleccionDestino Destino = new EleccionDestino(G, Cercano, Grafo); Destino.ShowDialog(); DestinoElegido = Destino.GetDestino(); Pila.Push(Cercano); Visitados.Add(Cercano); Posible.Add(Cercano); DFS(Pila, Visitados, Posible); bool Imposible = true; foreach (Vertice v in Posible) { if (v.Equals(DestinoElegido)) { Imposible = false; break; } } if (Imposible == true) { DestinoElegido = Cercano; } } while (DestinoElegido == Cercano); Dijkstra D = new Dijkstra(G, Cercano, DestinoElegido); D.GetCamino().Reverse(); Agente presa = new Agente(Cercano, ++ContVertices, DestinoElegido, D.GetCamino()); Presa.Add(presa); } else { Pila.Push(Cercano); Visitados.Add(Cercano); Posible.Add(Cercano); DFS(Pila, Visitados, Posible); Agente depredador = new Agente(Cercano, ++ContVertices, null, Posible); Point Punto = new Point(Cercano.getX(), Cercano.getY()); DibujarCirculo(Punto, BrochaDepredador, Animacion); ListaDepredadores.Items.Add(depredador.ToString()); Depredador.Add(depredador); } pictureBox1.Refresh(); this.NumAgentes.Text = ContVertices.ToString(); Usados.Add(Cercano); } } }
void BtnCargarImagenClick(object sender, EventArgs e) { try { if (openFileDialog1.ShowDialog() == DialogResult.OK) { NombreImagen = openFileDialog1.FileName; Image imagen = Image.FromFile(NombreImagen); Picture = new Bitmap(imagen, pictureBox1.Width, pictureBox1.Height); Rectangle Dimensiones = new Rectangle(0, 0, Picture.Width, Picture.Height); System.Drawing.Imaging.PixelFormat Formato = Picture.PixelFormat; Grafo = Picture.Clone(Dimensiones, Formato); pictureBox1.Image = Picture; labelMenor.Text = ""; this.BtnAnimacion.Enabled = false; this.CbNumPresas.Enabled = false; this.CbNumDepredadoras.Enabled = false; this.CbNumPresas.Text = ""; this.CbNumDepredadoras.Text = ""; this.BtnIngresarAgentes.Enabled = false; G = new Grafo(); ListaRadar.Items.Clear(); ListaDepredadores.Items.Clear(); ContVertices = 1; this.CbNumPresas.Items.Clear(); this.CbNumDepredadoras.Items.Clear(); int x, y; List <Vertice> lv = G.getLv(); for (y = 0; y < Picture.Height; y += 20) { for (x = 0; x < Picture.Width; x += 20) { colorpixel = Picture.GetPixel(x, y); if (colorpixel == Negro) { Vaux = EncontrarCentro(x, y); if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() && l.getY() == Vaux.getY()))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() && l.getY() == Vaux.getY() + 1))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() + 1 && l.getY() == Vaux.getY()))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() && l.getY() == Vaux.getY() - 1))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() - 1 && l.getY() == Vaux.getY()))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() + 1 && l.getY() == Vaux.getY() + 1))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() - 1 && l.getY() == Vaux.getY() - 1))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() + 1 && l.getY() == Vaux.getY() - 1))) { ContVertices--; } else { if (lv.Contains(lv.Find(l => l.getX() == Vaux.getX() - 1 && l.getY() == Vaux.getY() + 1))) { ContVertices--; } else { lv.Add(Vaux); } } } } } } } } } } } } Graphics graphics = Graphics.FromImage(Grafo); for (int i = 0; i < lv.Count; i++) { for (int j = 0; j < lv.Count; j++) { p_0.X = lv[i].getX(); p_0.Y = lv[i].getY(); p_f.X = lv[j].getX(); p_f.Y = lv[j].getY(); if (lv[i].getId().ToString() == lv[j].getId().ToString()) { } else { List <Point> Resultado = DDA(); if (Resultado != null) { pictureBox1.Refresh(); double distancia = Math.Sqrt(Math.Pow((double)p_f.X - (double)p_0.X, 2) + Math.Pow((double)p_f.Y - (double)p_0.Y, 2)); lv[i].addArista(lv[j], distancia, lv[i], Resultado); } } } } for (int i = 0; i < lv.Count; i++) { List <Arista> la = lv[i].getLa(); DibujarCentro(lv[i].getX(), lv[i].getY()); graphics.DrawString(lv[i].getId().ToString(), drawFont, BrochaID, lv[i].getX(), lv[i].getY()); } for (int i = 1; i < lv.Count; i++) { CbNumPresas.Items.Add(i); CbNumDepredadoras.Items.Add(i); } this.CbNumPresas.Enabled = true; this.CbNumDepredadoras.Enabled = true; ContVertices = 0; this.NumAgentes.Text = ContVertices.ToString(); pictureBox1.BackgroundImage = Grafo; pictureBox1.BackgroundImageLayout = ImageLayout.Zoom; Animacion = Grafo.Clone(Dimensiones, Formato); copia = Grafo.Clone(Dimensiones, Formato); pictureBox1.Image = Animacion; } } catch (Exception ex) { MessageBox.Show("El archivo seleccionado no es un tipo de imagen válido"); } }