As explained in my previous tutorial, equatorial coordinates are based on a projection of the Earth’s equator to demarcate position in the celestial sphere. Now we move on to ecliptic coordinates.

The Earth’s axis of rotation is not quite the same as the plane in which it revolves around the Sun. The Earth’s axis is tilted by approximately 23.4 degrees to this plane, called the ecliptic plane. This tilt is what causes our seasons and other related phenomena.

Now, ecliptic coordinates uses the ecliptic plane as its base plane, much like the equatorial coordinate system uses the Earth’s equator as it’s base. This gives the position of the sky relative to this plane, which can be very useful when doing calculations which include the Sun, since the Earth and the Sun would both be on the base plane.

The ecliptic latitude is denoted by the β symbol, and the ecliptic longitude is denoted by λ.

To convert between equatorial and ecliptic coordinates, we only need the obliquity of the ecliptic (the angle of the Earth’s tilt) as additional information to calculate the conversion.

		public static void ConvEquToEcl(double fOblique, double fRA, double fDecl, ref double fELong, ref double fELat)
		{
			double fX;
			double fY;
			double fSinELat;

			fDecl = Trig.DegToRad(fDecl);
			fRA = Trig.DegToRad(fRA * 15);
			fOblique = Trig.DegToRad(fOblique);
			fSinELat = (Math.Sin(fDecl) * Math.Cos(fOblique)) - (Math.Cos(fDecl) * Math.Sin(fOblique) * Math.Sin(fRA));
			fELat = Math.Asin(fSinELat);
			fY = (Math.Sin(fRA) * Math.Cos(fOblique)) + (Math.Tan(fDecl) * Math.Sin(fOblique));
			fX = Math.Cos(fRA);
			fELong = Math.Atan(fY / fX);
			fELong = Trig.RadToDeg(fELong);
			fELat = Trig.RadToDeg(fELat);
			fELong = Trig.TanQuadrant(fX, fY, fELong);
		}

		public static void ConvEclToEqu(double fOblique, double fELong, double fELat, ref double fRA, ref double fDecl)
		{
			double fX;
			double fY;
			double fSinDecl;

			fELong = Trig.DegToRad(fELong);
			fELat = Trig.DegToRad(fELat);
			fOblique = Trig.DegToRad(fOblique);
			fSinDecl = (Math.Sin(fELat) * Math.Cos(fOblique)) + (Math.Cos(fELat) * Math.Sin(fOblique) * Math.Sin(fELong));
			fDecl = Math.Asin(fSinDecl);
			fY = (Math.Sin(fELong) * Math.Cos(fOblique)) - (Math.Tan(fELat) * Math.Sin(fOblique));
			fX = Math.Cos(fELong);
			fRA = Math.Atan(fY / fX);
			fRA = Trig.RadToDeg(fRA);
			fDecl = Trig.RadToDeg(fDecl);
			fRA = Trig.TanQuadrant(fX, fY, fRA);
			fRA = fRA / 15.0;
		}
Share