Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 62 additions & 44 deletions js/jday.js
Original file line number Diff line number Diff line change
@@ -1,44 +1,62 @@
// -----------------------------------------------------------------------------
//
// function jday.m
//
// this function finds the julian date given the year, month, day, and time.
//
// author : david vallado 719-573-2600 27 may 2002
//
// revisions
// -
//
// inputs description range / units
// year - year 1900 .. 2100
// mon - month 1 .. 12
// day - day 1 .. 28,29,30,31
// hr - universal time hour 0 .. 23
// min - universal time min 0 .. 59
// sec - universal time sec 0.0 .. 59.999
// whichtype - julian .or. gregorian calender 'j' .or. 'g'
//
// outputs :
// jd - julian date days from 4713 bc
//
// locals :
// none.
//
// coupling :
// none.
//
// references :
// vallado 2007, 189, alg 14, ex 3-14
//
// jd = jday(yr, mon, day, hr, min, sec)
// -----------------------------------------------------------------------------

function jday(yr, mon, day, hr, min, sec) {
return 367.0 * yr -
Math.floor((7 * (yr + Math.floor((mon + 9) / 12.0))) * 0.25) +
Math.floor(275 * mon / 9.0) +
day + 1721013.5 +
((sec / 60.0 + min) / 60.0 + hr) / 24.0;
// - 0.5 * sign(100.0 * yr + mon - 190002.5) + 0.5;
}

// -----------------------------------------------------------------------------
//
// function jday.m
//
// this function finds the julian date given the year, month, day, and time.
//
// author : david vallado 719-573-2600 27 may 2002
//
// revisions
// -
//
// inputs description range / units
// year - year 1900 .. 2100
// mon - month 1 .. 12
// day - day 1 .. 28,29,30,31
// hr - universal time hour 0 .. 23
// min - universal time min 0 .. 59
// sec - universal time sec 0.0 .. 59.999
// whichtype - julian .or. gregorian calender 'j' .or. 'g'
//
// outputs :
// jd - julian date days from 4713 bc
//
// locals :
// none.
//
// coupling :
// none.
//
// references :
// vallado 2007, 189, alg 14, ex 3-14
//
// jd = jday(yr, mon, day, hr, min, sec)
// -----------------------------------------------------------------------------

function jday(yr, mon, day, hr, min, sec) {
return 367.0 * yr -
Math.floor((7 * (yr + Math.floor((mon + 9) / 12.0))) * 0.25) +
Math.floor(275 * mon / 9.0) +
day + 1721013.5 +
((sec / 60.0 + min) / 60.0 + hr) / 24.0;
// - 0.5 * sign(100.0 * yr + mon - 190002.5) + 0.5;
}

/**
* Added functions to support finding geodetic position
*/
function ThetaG_JD(jd) {
var UT = 0.0, TU = 0.0, GMST = 0.0;
var secday = 8.6400E4;
var omega_E = 1.00273790934;
var twopi = 2.0 * Math.PI;

UT = Frac(jd + 0.5);
jd = jd - UT;
TU = (jd - 2451545.0) / 36525;
GMST = 24110.54841 + TU * (8640184.812866 + TU * (0.093104 - TU * 6.2E-6));
GMST = Modulus(GMST + secday * omega_E * UT, secday);

return (twopi * GMST / secday);
}

34 changes: 34 additions & 0 deletions js/math_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,38 @@ function dot(a, b) {
}


/**
* Added functions to support finding geodetic position
*/
function FMod2p(x) {
var i = 0;
var ret_val = 0.0;
var twopi = 2.0 * Math.PI;

ret_val = x;
i = parseInt(ret_val / twopi);
ret_val -= i * twopi;

if (ret_val < 0.0)
ret_val += twopi;

return ret_val;
}

function Sqr(arg) {
return (arg * arg);
}

function Frac(arg) {
return(arg - Math.floor(arg));
}

function Modulus(arg1, arg2) {
return arg1 - (parseInt(arg1 / arg2)) * arg2;
}

function Degrees(arg) {
var deg2rad = 1.745329251994330E-2;

return (arg / deg2rad);
}
33 changes: 33 additions & 0 deletions js/post.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
var geodetic_t = function() {
lat = 0.0;
lon = 0.0;
alt = 0.0;
theta = 0.0;
}

function Calculate_LatLonAlt(time, pos, geodetic) {
var r = 0.0, e2 = 0.0, phi = 0.0, c = 0.0;
var f = 3.35281066474748E-3;
var xkmper = 6.378137E3;
var pio2 = 1.57079632679489656;
var twopi = 2.0 * Math.PI;

geodetic.theta = Math.atan2(pos[1], pos[0]);
geodetic.lon = FMod2p(geodetic.theta - ThetaG_JD(time));

r = Math.sqrt(Sqr(pos[0]) + Sqr(pos[1]));
e2 = f * (2 - f);
geodetic.lat = Math.atan2(pos[2], r);

do {
phi = geodetic.lat;
c = 1 / Math.sqrt(1 - e2 * Sqr(Math.sin(phi)));
geodetic.lat = Math.atan2(pos[2] + xkmper * c * e2 * Math.sin(phi), r);

} while (Math.abs(geodetic.lat - phi) >= 1E-10);

geodetic.alt = r / Math.cos(geodetic.lat) - xkmper * c;

if (geodetic.lat > pio2)
geodetic.lat -= twopi;
}
Loading