예제 #1
0
 public IManiobraRotacion CreateManiobra(ActitudRotacion siguienteActitud, ISateliteData sateliteData, Vector orientacionSolicitada)
 {
     return container.Resolve<IManiobraRotacion>(
         new NamedParameter("siguienteActitud", siguienteActitud),
         new NamedParameter("sateliteData", sateliteData),
         new NamedParameter("orientacionSolicitada", orientacionSolicitada)
     );
 }
예제 #2
0
        public ISatelite CreateSatelite(Vector posicionInicial, Vector velocidadInicial)
        {
            var sateliteData = container.Resolve<ISateliteData>(
                new NamedParameter("posicion", posicionInicial),
                new NamedParameter("velocidad", velocidadInicial)
                );

            return container.Resolve<ISatelite>(
                new NamedParameter("sateliteData", sateliteData)
            );
        }
예제 #3
0
        public ManiobraRotacion(Constantes constantes, IVectorTools vectorTools, ActitudRotacion siguienteActitud, ISateliteData sateliteData, Vector orientacionSolicitada)
        {
            this.constantes = constantes;
            this.vectorTools = vectorTools;
            SiguienteActitud = siguienteActitud;

            orientacionInicial = sateliteData.Orientacion;
            orientacionFinal = orientacionSolicitada;

            float anguloEnGrados = vectorTools.AngleTo(orientacionInicial, orientacionFinal);

            tiempoParaFinalizarEnSegundos = anguloEnGrados / velocidadAngularEnGradosPorSegundo;
        }
예제 #4
0
        public OrbitalElements Convertir(Vector posicion, Vector velocidad)
        {
            float vr = (float)Math.Round((posicion.X * velocidad.X + posicion.Y * velocidad.Y + posicion.Z * velocidad.Z) / posicion.Magnitude, 4);
            Vector angularMomentum = vectorTools.CrossProduct( posicion, velocidad);
            float inclination = (float)Math.Acos(angularMomentum.Z / angularMomentum.Magnitude);
            Vector nodeLine = vectorTools.CrossProduct( constantes.XAxis, angularMomentum);
            float angleOfAscendingNode = NormalizarCuadrante(nodeLine.Y < 0, Math.Acos(nodeLine.X / nodeLine.Magnitude));
            Vector excentricityVector = (1 / constantes.Mu) * (posicion * (Math.Pow(velocidad.Magnitude, 2) - (constantes.Mu / posicion.Magnitude))) - (velocidad * posicion.Magnitude * vr);
            double excentricity = excentricityVector.Magnitude;
            float argumentOfPeriapsis = NormalizarCuadrante(excentricityVector.Z < 0, Math.Acos(vectorTools.DotProduct( nodeLine, excentricityVector) / (nodeLine.Magnitude * excentricity)));
            float trueAnomaly = NormalizarCuadrante(vr < 0, Math.Acos(vectorTools.DotProduct(excentricityVector, posicion) / (excentricity * posicion.Magnitude)));

            return new OrbitalElements(constantes, (float)angularMomentum.Magnitude, (float)excentricity, inclination, angleOfAscendingNode, argumentOfPeriapsis, trueAnomaly);
        }
예제 #5
0
        public SateliteData(Constantes constantes, Vector posicion, Vector velocidad)
        {
            this.constantes = constantes;

            Velocidad = velocidad;
            Posicion = posicion;

            Orientacion = constantes.XAxis.Clone();
            Orientacion.Normalize();

            Camara = posicion.Clone();
            Camara.Normalize();
            Camara = Camara * 10;

            Actitud = ActitudRotacion.CaidaLibre;
            ActitudSolicitada = ActitudRotacion.Ninguna;
            Impulso = 0;
            ImpulsoSolicitado = -1;

            InvalidateOrbitalValues();
        }