Ejemplo n.º 1
0
        public void Generate2States(float prevTime, float currTime, float stateTime, out CometState prev, out CometState curr)
        {
            prev.position = position + velocity * (prevTime - stateTime);
            prev.velocity = velocity;

            curr.position = position + velocity * (currTime - stateTime);
            curr.velocity = velocity;
        }
Ejemplo n.º 2
0
        public static CometState Lerp(CometState a, CometState b, float t)
        {
            CometState c;

            c.position = Vector3.Lerp(a.position, b.position, t);
            c.velocity = Vector3.Lerp(a.velocity, b.velocity, t);
            return(c);
        }
Ejemplo n.º 3
0
        public void Step()
        {
            frames++;
            simTime += TIMESTEP;

            for (int i = 0; i < planets.Count; i++)
            {
                PlanetState planet = planets[i];

                planet.angle   += planet.angularSpeed * TIMESTEP;
                planet.position = new Vector3(planet.distanceFromCenter * Mathf.Cos(planet.angle), 0, planet.distanceFromCenter * Mathf.Sin(planet.angle));

                planets[i] = planet;
            }

            for (int i = 0; i < comets.Count; i++)
            {
                CometState comet = comets[i];

                for (int j = 0; j < planets.Count; j++)
                {
                    PlanetState planet = planets[j];

                    Vector3 toPlanet     = planet.position - comet.position;
                    float   distToPlanet = toPlanet.magnitude;

                    Vector3 accelOnComet = 10 * planet.mass * gravivationalConstant * toPlanet / (distToPlanet * distToPlanet * distToPlanet);
                    comet.velocity += accelOnComet * TIMESTEP;
                }

                Vector3 toSun     = -comet.position;
                float   distToSun = toSun.magnitude;

                Vector3 accelToSun = sunMass * gravivationalConstant * toSun / (distToSun * distToSun * distToSun);
                comet.velocity += accelToSun * TIMESTEP;

                comet.position += comet.velocity * TIMESTEP;

                comets[i] = comet;
            }
        }