コード例 #1
0
        public void UpdateSimulation()
        {
            if (orbitDecay != 0)
            {
                orbit.periapsis += orbitDecay * Time.deltaTime * orbit.timeScale;

                if (orbit.periapsis <= 0)
                {
                    //behaviour beyond this point is undefined, best not upset the Kraken
                    ResetSimulation();
                    StopSimulation();
                    orbit.StopSimulation();
                }
                else
                {
                    orbit.period = Math.Sqrt(
                        (periodOriginal * periodOriginal) *
                        (orbit.periapsis * orbit.periapsis * orbit.periapsis) /
                        (semiMajorAxisOriginal * semiMajorAxisOriginal * semiMajorAxisOriginal)
                        );
                }
            }

            if (apsidalPrecession != 0)
            {
                orbit.argument = Kepler.WrapAngle(orbit.argument - apsidalPrecession * Time.deltaTime * (float)orbit.timeScale, -180, 180);
            }
        }
コード例 #2
0
 public void UpdateSimulation()
 {
     angle = Kepler.WrapAngle(angle + Time.deltaTime * rate * timeScale, 0, 2 * Math.PI);
     ComputeDynamicProperties(angle);
     transform.localRotation = rotation;
 }
コード例 #3
0
 public void ResetSimulation()
 {
     angle = Kepler.WrapAngle(meanAngle * Deg2Rad + startEpoch * rate, 0, 2 * Math.PI);
 }