public double velocity(CorpoCeleste origem, CorpoCeleste destino, double shipCurH)
 {
     double exitAlt = origem.alt + origem.soi;
     double v2 = Math.Sqrt(destino.parent.mu / exitAlt) * (Math.Sqrt((2 * destino.alt) / (exitAlt + destino.alt)) - 1);
     double r = origem.radius + shipCurH;
     double v = Math.Sqrt((r * (origem.soi * v2 * v2 - 2 * origem.mu) + 2 * origem.soi * origem.mu) / (r * origem.soi));
     return (Math.Round(v * 100000) / 100);
 }
 public double phaseAngle(CorpoCeleste origem, CorpoCeleste destino)
 {
     double th;
     double phase;
     //testar "destino.parent.mu ver se está calculando certo.
     th = Math.PI * Math.Sqrt(Math.Pow(origem.alt + destino.alt, 3) / (8 * destino.parent.mu));
     phase = 180 - Math.Sqrt(destino.parent.mu / destino.alt) * (th / destino.alt) * (180 / Math.PI) % 360;
     return (Math.Round(phase * 100) / 100);
 }
        public double ejectAngle(CorpoCeleste origem, CorpoCeleste destino, double shipCurH)
        {
            double exitAlt = origem.alt + origem.soi;
            double v2 = Math.Sqrt(destino.parent.mu / exitAlt) * (Math.Sqrt((2 * destino.alt) / (exitAlt + destino.alt)) - 1);
            double r = origem.radius + shipCurH;
            double v = Math.Sqrt((r * (origem.soi * v2 * v2 - 2 * origem.mu) + 2 * origem.soi * origem.mu) / (r * origem.soi));
            double eta = v * v / 2 - origem.mu / r;
            double h = r * v;
            double e = Math.Sqrt(1 + ((2 * eta * h * h) / (origem.mu * origem.mu)));
            double eject = (180 - (Math.Acos(1 / e) * (180 / Math.PI))) % 360;

            if (e < 1)
            {
                // Credito a maltesh pela solucao para a transferencias de orbitas excentricas
                var a = -origem.mu / (2 * eta);
                var l = a * (1 - e * e);
                var nu = Math.Acos((l - origem.soi) / (e * origem.soi));
                var phi = Math.Atan2((e * Math.Sin(nu)), (1 + e * Math.Cos(nu)));
                // credito a Kosmo-nots por arrumar a solucao de maltesh
                eject = (90 - (phi * 180 / Math.PI) + (nu * 180 / Math.PI)) % 360;
            }

            return (Math.Round(eject * 100) / 100);
        }