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) ); }
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) ); }
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; }
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); }
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(); }