public bool añadirfp(FlightPlan fp) //añade el plan de vuelo dado como parámetro, solo si no estaba ya en la lista
        {
            int  i     = 0;
            bool found = false;

            //Si no hay ningún FP en la lista, se puede añadir
            if (ListFP.Count == 0)
            {
                ListFP.Add(fp);
            }

            //Si hay algún FP en la lista comprobamos que el que se vaya añadir no esté
            else
            {
                //Recorremos la lista buscando su ID
                while (i < ListFP.Count && found == false)
                {
                    if (fp.GetID() == ListFP[i].GetID())
                    {
                        found = true;
                    }
                    else
                    {
                        i++;
                    }
                }

                //Si no lo encontramos, lo añadimos a la lista
                if (found == false)
                {
                    ListFP.Add(fp);
                }
            }
            return(found); //found=true: ya estaba en la lista, no lo ha añadido / found=false: no estaba en la lista, lo ha añadido
        }
        public List <double> DadmeDistancias(int pos) //Nos da una lista con distancias entre el vuelo en la posición dada como parámetro y todos los demás vuelos
        {
            //Cogemos el plan de vuelo en la posición dada como parámetro
            FlightPlan fp = ListFP[pos];

            //Creamos la lista que nos va a devolver
            List <double> dist = new List <double>();

            //Recorremos la lista
            int i = 0;

            while (i < ListFP.Count)
            {
                //Mientras no sea el vuelo respecto al que estamos calculando las distancias, calculamos y metemos en la lista
                if (i != pos)
                {
                    dist.Add(fp.Distance(ListFP[i]));
                }

                i++;
            }

            //Devolvemos la lista
            return(dist);
        }
        public void CargarFichero(string fichero)           //lee un fichero con datos de vuelos
        {
            StreamReader R     = new StreamReader(fichero); //leer fichero
            string       linea = R.ReadLine();              //leer primera línea

            while (linea != null)
            {
                string[] trozos = linea.Split(' '); //partimos la linea por los espacios

                //leemos los datos
                string id        = trozos[0];
                string compañia  = trozos[1];
                double velocidad = Convert.ToDouble(trozos[2]);
                double ix        = Convert.ToDouble(trozos[3]);
                double iy        = Convert.ToDouble(trozos[4]);
                double fx        = Convert.ToDouble(trozos[7]);
                double fy        = Convert.ToDouble(trozos[8]);

                //creamos el FP
                FlightPlan fp = new FlightPlan(id, compañia, velocidad, ix, iy, fx, fy);

                //asignamos la posicion actual (en el constructor a la posición actual se le asigna la inicial)
                fp.SetAX(Convert.ToDouble(trozos[5]));
                fp.SetAY(Convert.ToDouble(trozos[6]));

                //añadimos el fp a la lista
                ListFP.Add(fp);

                linea = R.ReadLine();
            }
            R.Close(); //cerrar fichero
        }
        public void SolucionarConflictos(int dseg, int interval) //soluciona los conflictos (se supone que antes he de comprobar si hay)
        {
            int i = 0;
            int j = 0;

            while (i < ListFP.Count)
            {
                FlightPlan fp1 = ListFP[i];
                j = 0;
                while (j < ListFP.Count && i != j)
                {
                    FlightPlan fp2 = ListFP[j];
                    while (fp1.HasArrived() == false && fp2.HasArrived() == false)
                    {
                        if (fp1.Estaenconflicto(fp2, dseg) == -1)
                        {
                            fp1.ChangeSpeedToAvoidConflict();
                        }
                        fp1.Move(interval);
                        fp2.Move(interval);
                    }
                    fp1.Restart();
                    fp2.Restart();
                    j++;
                }
                i++;
            }
        }
Esempio n. 5
0
 //Constructor copia
 public FlightPlan(FlightPlan fp)
 {
     this.ID          = fp.GetID();
     this.compañia    = fp.GetCompañia();
     this.velocidad   = fp.GetVelocidad();
     this.IX          = fp.GetIX();
     this.FX          = fp.GetFX();
     this.AX          = fp.GetAX();
     this.IY          = fp.GetIY();
     this.FY          = fp.GetFY();
     this.AY          = fp.GetAY();
     this.incrementov = fp.GetIncrementoV();
 }
        public void GuardarVuelos(string fichero)       //escribe fichero con los datos actuales de los vuelos
        {
            StreamWriter W = new StreamWriter(fichero); //escribir fichero
            int          i = 0;

            while (i < ListFP.Count)
            {
                FlightPlan f = ListFP[i];
                W.WriteLine(f.GetID() + " " + f.GetCompañia() + " " + Convert.ToString(f.GetVelocidad()) + " " + Convert.ToString(f.GetIX()) + " " + Convert.ToString(f.GetIY()) + " " + Convert.ToString(f.GetAX()) + " " + Convert.ToString(f.GetAY()) + " " + Convert.ToString(f.GetFX()) + " " + Convert.ToString(f.GetFY()));
                i++;
            }
            W.Close(); //cerrar fichero
        }
Esempio n. 7
0
        public int Estaenconflicto(FlightPlan plan, double ds) //dice si hay o no conflicto entre dos vuelos
        {
            //calculamos la distancia entre los dos vuelos
            double distace = this.Distance(plan);

            //si la distancia entre los dos vuelos es menor a la de seguridad, hay conflicto
            if (distace <= ds)
            {
                return(-1); //hay conflicto
            }
            //si la distancia entre los dos vuelos es mayor a la de seguridad, no hay conflicto
            else
            {
                return(0); //no hay conflicto
            }
        }
Esempio n. 8
0
        public Boolean Estaranenconflicto(FlightPlan plan, double ds)     //dice si habrá, en un futuro, conflicto entre el fp y el fp dado omo parametro
        {
            //Parámetros fp clase
            double Hthis = Math.Sqrt((this.FX - this.AX) * (this.FX - this.AX) + (this.FY - this.AY) * (this.FY - this.AY)); //H: distancia que hay desde donde está hasta su posición final
            double Cthis = (this.FX - this.AX) / Hthis;                                                                      //C: coseno
            double Sthis = (this.FY - this.AY) / Hthis;                                                                      //S: seno

            //Parámetros fp plan
            double Hplan = Math.Sqrt((plan.FX - plan.AX) * (plan.FX - plan.AX) + (plan.FY - plan.AY) * (plan.FY - plan.AY)); //H: distancia que hay desde donde está hasta su posición final
            double Cplan = (plan.FX - plan.AX) / Hplan;                                                                      //C: coseno
            double Splan = (plan.FY - plan.AY) / Hplan;                                                                      //S: seno

            double OX = this.GetIX() - plan.GetIX();
            double OY = this.GetIY() - plan.GetIY();

            double CV = (this.GetVelocidad() * Cthis - plan.GetVelocidad() * Cplan) / 3600;
            double SV = (this.GetVelocidad() * Sthis - plan.GetVelocidad() * Splan) / 3600;

            //Definimos el parámetro distancia
            double distancia;

            //Caso particular: los dos aviones vuelan en la misma dirección, en el mismo sentido y a la misma velocidad --> la distancia será siempre la misma
            if (SV == 0 && CV == 0)
            {
                distancia = this.Distance(plan); //me da igual en la posición que estén
            }
            //Todos los demás casos:
            //Las fórmulas que usamos las hemos obtenido manualmente optimizando la distancia y con las ecuaciones del movimiento
            else
            {
                //Momento en el que la distancia será mínima
                double t = -(OY * SV + OX * CV) / (CV * CV + SV * SV);
                //Distancia mínima
                distancia = Math.Sqrt((OX + t * CV) * (OX + t * CV) + (OY + t * SV) * (OY + t * SV));
            }

            if (distancia < ds)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public Boolean BuscarConflictos(int dseg) //dice si hay conflictos o no (no los soluciona)
        {
            int  i     = 0;
            int  j     = 0;
            bool found = false;

            while (i < ListFP.Count && found == false)
            {
                FlightPlan fp1 = ListFP[i];
                while (j < ListFP.Count && i != j && found == false)
                {
                    FlightPlan fp2 = ListFP[j];
                    if (fp1.Estaranenconflicto(fp2, dseg) == true)
                    {
                        found = true;
                    }
                    j++;
                }
                i++;
            }
            return(found); //found=true: hay conflictos ; found=false: no hay conflictos
        }
Esempio n. 10
0
 public double Distance(FlightPlan plan) //calcula la distancia entre mi avión y la del avión del flightplan dado como parámetro
 {
     return(Math.Sqrt((this.AX - plan.AX) * (this.AX - plan.AX) + (this.AY - plan.AY) * (this.AY - plan.AY)));
 }