private void DoGetPlanetOrbit(PlanetElm planetElm) { double ae2 = -2.0 * planetElm.a * planetElm.e; double t = Math.Sqrt(1.0 - planetElm.e * planetElm.e); int xp1 = 0; int xp2 = (this.Division / 2); int xp3 = (this.Division / 2); int xp4 = this.Division; double E = 0.0; for (int i = 0; i <= (this.Division / 4); i++, E += (360.0 / this.Division)) { double rcosv = planetElm.a * (UdMath.udcos(E) - planetElm.e); double rsinv = planetElm.a * t * UdMath.udsin(E); this.Orbit[xp1++] = new Xyz(rcosv, rsinv, 0.0); this.Orbit[xp2--] = new Xyz(ae2 - rcosv, rsinv, 0.0); this.Orbit[xp3++] = new Xyz(ae2 - rcosv, -rsinv, 0.0); this.Orbit[xp4--] = new Xyz(rcosv, -rsinv, 0.0); } }
public PlanetOrbit(int planetNo, ATime atime, int division) { this.PlanetNo = planetNo; this.JD = atime.JD; this.Division = division; PlanetElm planetElm = new PlanetElm(planetNo, atime); this.Orbit = new Xyz[division + 1]; DoGetPlanetOrbit(planetElm); Matrix vec = Matrix.VectorConstant(planetElm.w * Math.PI / 180.0, planetElm.N * Math.PI / 180.0, planetElm.i * Math.PI / 180.0, atime); Matrix prec = Matrix.PrecMatrix(atime.JD, 2451512.5); for (int i = 0; i <= division; i++) { this.Orbit[i] = this.Orbit[i].Rotate(vec).Rotate(prec); } }