NavList:
A Community Devoted to the Preservation and Practice of Celestial Navigation and Other Methods of Traditional Wayfinding
Re: Unexpected USNO height correction precepts
From: Paul Hirose
Date: 2018 Dec 20, 13:44 -0800
From: Paul Hirose
Date: 2018 Dec 20, 13:44 -0800
On 2018-12-18 12:45, Mehmet Guzey wrote: > Could you please help me on howto find the azimuth correction to be applied to venus phase correction value and what other steps, if any, to follow for general venus phase correction procedure? The next version of my Lunar program (in test, to be released early next year) has a general solution for the center of light correction. This C# source code is tested and returns the correct result. It requires my SofaJpl astronomy DLL: http://home.earthlink.net/~s543t-24dst/SofaJpl_NET/index.html Input data are heliocentric and topocentric vectors to the body, and a topocentric vector to the Sun. All vectors must be in the same coordinate system. (The topocentric vectors can be geocentric if you want a geocentric result.) Output is a vector to the center of light. This is identical to the center of the body if the body is a star or the Sun. ////// Get the center of light of a body. /// /// the body to adjust /// topocentric or geocentric vector to body /// heliocentric vector to body /// topocentric or geocentric vector to Sun ///vector to center of light ///Has no effect if the body is a star or the Sun. All vectors must be in the /// same coordinate system, such as the ICRS. private static SofaJpl.Vector centerOfLight(SofaJpl.Body body, SofaJpl.Vector bodyVec, SofaJpl.Vector helioVec, SofaJpl.Vector sunVec) { if (!body.IsSolarSystemBody || body.IsSun) return bodyVec; // Phase angle, position angle, semidiameter. double phaseAngle = bodyVec.SeparationAngle(helioVec); double positionAngle = bodyVec.PositionAngle(sunVec); double sd = SofaJpl.Angle.Semidiameter(bodyVec.Modulus(), body.Radius); // Center of light. double sinHalfPhi = Math.Sin(phaseAngle / 2.0); // Formula for offset derived by George Huxtable. double offset = 8.0 / (3.0 * Math.PI) * sinHalfPhi * sinHalfPhi * sd; return new SofaJpl.Vector(bodyVec, positionAngle, offset); }