Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
        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);
                }
            }
        }