private bool Caminar(Agente agente, int destino, Bitmap bmp) { if (agente.Velocidad + agente.Pos < caminos[agente.Actual][destino].Count - 1) { selectedImage.BackgroundImage = originalImage; selectedImage.BackgroundImageLayout = ImageLayout.Zoom; //Para que encuadre DibujarCirculo(caminos[agente.Actual][destino][agente.Pos].Item1, caminos[agente.Actual][destino][agente.Pos].Item2, bmp, 10, agente.Color); DibujarRadar(caminos[agente.Actual][destino][agente.Pos].Item1, caminos[agente.Actual][destino][agente.Pos].Item2, bmp, 10, agente.Color); agente.Pos += agente.Velocidad; return(true); } else { DibujarCirculo(caminos[agente.Actual][destino][caminos[agente.Actual][destino].Count - 1].Item1, caminos[agente.Actual][destino][caminos[agente.Actual][destino].Count - 1].Item2, bmp, 10, agente.Color); DibujarRadar(caminos[agente.Actual][destino][agente.Pos].Item1, caminos[agente.Actual][destino][agente.Pos].Item2, bmp, 10, agente.Color); agente.Pos = 0; return(false); } }
private int Buscar_Camino(Agente a, Dictionary <int, Dictionary <int, Dictionary <int, int> > > visitados) { bool todosVisitados = true; if (a.Actual == señuelo.Actual) { encontrado = true; SeñueloAleatorio(); a.Velocidad += 10; } Dictionary <int, double> prioridad = new Dictionary <int, double>(); foreach (int id in caminos[a.Actual].Keys) { if (visitados[a.Inicial][a.Actual][id] == 0) { todosVisitados = false; } double thetaBait = Math.Atan2((señuelo.Y - caminos[a.Actual][id][0].Item2), (señuelo.X - caminos[a.Actual][id][0].Item1)); double thetaEdge = Math.Atan2((caminos[a.Actual][id][caminos[a.Actual][id].Count - 1].Item2 - caminos[a.Actual][id][0].Item2), (caminos[a.Actual][id][caminos[a.Actual][id].Count - 1].Item1 - caminos[a.Actual][id][0].Item1)); if ((thetaEdge > Math.PI) && (thetaBait == 0)) { thetaBait = (2 * Math.PI); } double tempdiff = Math.Abs(thetaBait - thetaEdge); prioridad.Add(id, tempdiff); } List <double> ordenado = prioridad.Values.ToList(); var destino = from entry in prioridad where entry.Value == ordenado.Min() select entry.Key; int destinoactual = destino.FirstOrDefault(); var iguales = visitados[a.Inicial][a.Actual].GroupBy(x => x.Value).Where(x => x.Count() > 1); using (var secuencia = iguales.GetEnumerator()) { while (secuencia.MoveNext()) { Console.WriteLine(secuencia.Current); } } if (todosVisitados) { int id = visitados[a.Inicial][a.Actual].Aggregate((l, r) => l.Value < r.Value ? l : r).Key; return(id); } else { if (visitados[a.Inicial][a.Actual][destinoactual] == 0) { return(destinoactual); } else { int id = visitados[a.Inicial][a.Actual].Aggregate((l, r) => l.Value < r.Value ? l : r).Key; return(id); } } }