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