예제 #1
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();
 }
예제 #2
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 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
        }