public void OmegaLEllipseInclined() { const float mass = 1000f; GameObject star = TestSetupUtils.CreateNBody(mass, new Vector3(0, 0, 0)); const float orbitRadius = 10f; GameObject planet = TestSetupUtils.CreatePlanetInOrbit(star, 1f, orbitRadius); OrbitEllipse orbitEllipse = planet.GetComponent <OrbitEllipse>(); orbitEllipse.InitNBody(1f, 1f); orbitEllipse.inclination = 30f; orbitEllipse.ecc = 0.2f; orbitEllipse.ApplyScale(1f); orbitEllipse.Init(); orbitEllipse.InitNBody(1f, 1f); // Try some values of om float[] omegaValues = { 0f, 30f, 45f, 60f, 90f, 135f, 180f, 210f, 310f }; foreach (float omega in omegaValues) { orbitEllipse.omega_lc = omega; orbitEllipse.Init(); orbitEllipse.InitNBody(1f, 1f); orbitEllipse.Log("OmegaU inclined:"); OrbitData od = new OrbitData(); od.SetOrbitForVelocity(planet.GetComponent <NBody>(), star.GetComponent <NBody>()); Debug.Log("omegaL = " + omega + " od.omega_lc=" + od.omega_lc); TestRV(od, planet, star, orbitRadius); } }
public void CirclePhaseOmegaInclined() { const float mass = 1000f; GameObject star = TestSetupUtils.CreateNBody(mass, new Vector3(0, 0, 0)); const float orbitRadius = 10f; GameObject planet = TestSetupUtils.CreatePlanetInOrbit(star, 1f, orbitRadius); OrbitEllipse orbitEllipse = planet.GetComponent <OrbitEllipse>(); orbitEllipse.inclination = 20f; // Try some values of phase // omegaU for a circle does not make sense, no axis to relate it to. float[] phaseValues = { 0f, 30f, 45f, 60f, 90f, 135f, 180f, 210f, 320f }; foreach (float phase in phaseValues) { orbitEllipse.phase = phase; orbitEllipse.omega_uc = 0; TestSetupUtils.SetupGravityEngine(star, planet); Debug.LogFormat("Test for phase={0} omegau={1}", phase, 0); orbitEllipse.Log("Initial circle:"); OrbitData od = new OrbitData(); od.SetOrbitForVelocity(planet.GetComponent <NBody>(), star.GetComponent <NBody>()); Debug.Log("OrbitData: " + od.LogString()); Assert.IsTrue(FloatEqualMod360(phase, od.phase, 0.05)); Assert.IsTrue(FloatEqualMod360(0, od.omega_uc, 0.05)); TestRV(od, planet, star, orbitRadius); } }
public void CirclePhaseOmegaInclined() { const float mass = 1000f; GameObject star = TestSetupUtils.CreateNBody(mass, new Vector3(0, 0, 0)); const float orbitRadius = 10f; GameObject planet = TestSetupUtils.CreatePlanetInOrbit(star, 1f, orbitRadius); OrbitEllipse orbitEllipse = planet.GetComponent <OrbitEllipse>(); orbitEllipse.inclination = 20f; // Try some values of phase float[] phaseValues = { 0f, 30f, 45f, 60f, 90f, 135f, 180f, 210f, 320f }; float[] omegaUValues = { 0f, 30f, 45f, 60f, 90f, 135f, 180f, 210f, 320f }; foreach (float phase in phaseValues) { foreach (float omegau in omegaUValues) { orbitEllipse.phase = phase; orbitEllipse.omega_uc = omegau; orbitEllipse.Init(); orbitEllipse.ApplyScale(1f); orbitEllipse.InitNBody(1f, 1f); orbitEllipse.Log("Initial circle:"); OrbitData od = new OrbitData(); od.SetOrbitForVelocity(planet.GetComponent <NBody>(), star.GetComponent <NBody>()); Debug.Log("TEST: phase = " + phase + " od.phase=" + od.phase + " omegaU = " + omegau + " od.omegau=" + od.omega_uc); TestRV(od, planet, star, orbitRadius); } } }
public void PhaseNoInclinationEllipse() { const float mass = 1000f; GameObject star = TestSetupUtils.CreateNBody(mass, new Vector3(0, 0, 0)); const float orbitRadius = 20f; GameObject planet = TestSetupUtils.CreatePlanetInOrbit(star, 1f, orbitRadius); OrbitEllipse orbitEllipse = planet.GetComponent <OrbitEllipse>(); orbitEllipse.ecc = 0.2f; // Try some values of om float[] phaseValues = { 30f, 45f, 60f, 90f, 135f, 180f, 225f, 270f, 325f, 0f }; foreach (float phase in phaseValues) { orbitEllipse.phase = phase; TestSetupUtils.SetupGravityEngine(star, planet); OrbitData od = new OrbitData(); od.SetOrbitForVelocity(planet.GetComponent <NBody>(), star.GetComponent <NBody>()); orbitEllipse.Log("PhaseNoInclinationEllipse:"); Debug.Log(od.LogString()); // Need a bit of leeway at 0 with error Assert.IsTrue(FloatEqualMod360(phase, od.phase, 0.02)); Assert.IsTrue(FloatEqualMod360(0f, od.omega_lc, 0.02)); Assert.IsTrue(FloatEqualMod360(0f, od.omega_uc, 0.02)); TestRV(od, planet, star, orbitRadius); } }