generated from ztimson/template
init
This commit is contained in:
+131
@@ -0,0 +1,131 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.sunPos = sunPos;
|
||||
var _constants = require("./constants");
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
/* Line by Line MATLAB-to-Javascript conversion of "sun.mat" from Vallado package */
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
/* -----------------------------------------------------------------------------
|
||||
*
|
||||
* function sunPos
|
||||
*
|
||||
* this function calculates the geocentric equatorial position vector
|
||||
* the sun given the julian date. this is the low precision formula and
|
||||
* is valid for years from 1950 to 2050. accuaracy of apparent coordinates
|
||||
* is 0.01 degrees. notice many of the calculations are performed in
|
||||
* degrees, and are not changed until later. this is due to the fact that
|
||||
* the almanac uses degrees exclusively in their formulations.
|
||||
*
|
||||
* author : david vallado 719-573-2600 1 mar 2001
|
||||
*
|
||||
* inputs description range / units
|
||||
* jd - julian date days from 4713 bc
|
||||
*
|
||||
* outputs :
|
||||
* rsun - ijk position vector of the sun au
|
||||
* rtasc - right ascension rad
|
||||
* decl - declination rad
|
||||
*
|
||||
* coupling :
|
||||
* -
|
||||
*
|
||||
* references :
|
||||
* VALLADO, DAVID A. (2022) ‘Computer software in MATLAB’, in Fundamentals of astrodynamics and applications. 5th edn.
|
||||
* Computer software in MATLAB: http://celestrak.org/software/vallado-sw.php
|
||||
* --------------------------------------------------------------------------- */
|
||||
function sunPos(jday) {
|
||||
// ------------------------- implementation -----------------
|
||||
// ------------------- initialize values --------------------
|
||||
var tut1 = (jday - 2451545) / 36525;
|
||||
var meanlong = (280.460 + 36000.77 * tut1) % 360; //deg
|
||||
var ttdb = tut1; // is this declaration required instead of replacing `ttdb` with `tut1`
|
||||
var meananomaly = (357.5277233 + 35999.05034 * ttdb * _constants.deg2rad) % _constants.twoPi; //rad
|
||||
if (meananomaly < 0) {
|
||||
meananomaly += _constants.twoPi;
|
||||
}
|
||||
var eclplong_raw = (meanlong + 1.914666471 * Math.sin(meananomaly) + 0.019994643 * Math.sin(2.0 * meananomaly)) % 360.0 * _constants.deg2rad; //rad
|
||||
var obliquity = (23.439291 - 0.0130042 * ttdb) * _constants.deg2rad; //rad
|
||||
// --------- find magnitude of sun vector, and it's components ------
|
||||
var magr = 1.000140612 - 0.016708617 * Math.cos(meananomaly) - 0.000139589 * Math.cos(2.0 * meananomaly); // in au's
|
||||
var rsun = [magr * Math.cos(eclplong_raw), magr * Math.cos(obliquity) * Math.sin(eclplong_raw), magr * Math.sin(obliquity) * Math.sin(eclplong_raw)];
|
||||
var rtasc_raw = Math.atan(Math.cos(obliquity) * Math.tan(eclplong_raw));
|
||||
// --- check that rtasc is in the same quadrant as eclplong_raw ----
|
||||
var eclplong = eclplong_raw;
|
||||
if (eclplong < 0.0) {
|
||||
eclplong += _constants.twoPi; // make sure it's in 0 to 2pi range
|
||||
}
|
||||
var rtasc = rtasc_raw;
|
||||
if (Math.abs(eclplong_raw - rtasc) > _constants.pi * 0.5) {
|
||||
rtasc += 0.5 * _constants.pi * Math.round((eclplong_raw - rtasc_raw) / (0.5 * _constants.pi));
|
||||
}
|
||||
var decl = Math.asin(Math.sin(obliquity) * Math.sin(eclplong_raw));
|
||||
return {
|
||||
rsun: rsun,
|
||||
rtasc: rtasc,
|
||||
decl: decl
|
||||
};
|
||||
}
|
||||
/* Original MATLAB code for Sun position from Vallado package (sun.mat) */
|
||||
/*
|
||||
function [rsun,rtasc,decl] = sun ( jd );
|
||||
|
||||
twopi = 2.0*pi;
|
||||
deg2rad = pi/180.0;
|
||||
show = 'n';
|
||||
|
||||
% ------------------------- implementation -----------------
|
||||
% ------------------- initialize values --------------------
|
||||
tut1= ( jd - 2451545.0 )/ 36525.0;
|
||||
|
||||
if show == 'y'
|
||||
fprintf(1,'tut1 %14.9f \n',tut1);
|
||||
end
|
||||
|
||||
meanlong= 280.460 + 36000.77*tut1;
|
||||
meanlong= rem( meanlong,360.0 ); %deg
|
||||
|
||||
ttdb= tut1;
|
||||
meananomaly= 357.5277233 + 35999.05034 *ttdb;
|
||||
meananomaly= rem( meananomaly*deg2rad,twopi ); %rad
|
||||
if ( meananomaly < 0.0 )
|
||||
meananomaly= twopi + meananomaly;
|
||||
end
|
||||
|
||||
eclplong_raw= meanlong + 1.914666471 *sin(meananomaly) ...
|
||||
+ 0.019994643 *sin(2.0 *meananomaly); %deg
|
||||
eclplong_raw= rem( eclplong_raw,360.0 ); %deg
|
||||
|
||||
obliquity= 23.439291 - 0.0130042 *ttdb; %deg
|
||||
|
||||
eclplong_raw = eclplong_raw *deg2rad;
|
||||
obliquity= obliquity *deg2rad;
|
||||
|
||||
% --------- find magnitude of sun vector, ) components ------
|
||||
magr= 1.000140612 - 0.016708617 *cos( meananomaly ) ...
|
||||
- 0.000139589 *cos( 2.0 *meananomaly ); % in au's
|
||||
|
||||
rsun(1)= magr*cos( eclplong_raw );
|
||||
rsun(2)= magr*cos(obliquity)*sin(eclplong_raw);
|
||||
rsun(3)= magr*sin(obliquity)*sin(eclplong_raw);
|
||||
|
||||
if show == 'y'
|
||||
fprintf(1,'meanlon %11.6f meanan %11.6f eclplon %11.6f obli %11.6f \n', ...
|
||||
meanlong,meananomaly/deg2rad,eclplong_raw/deg2rad,obliquity/deg2rad);
|
||||
fprintf(1,'rs %11.9f %11.9f %11.9f \n',rsun);
|
||||
fprintf(1,'magr %14.7f \n',magr);
|
||||
end
|
||||
|
||||
rtasc= atan( cos(obliquity)*tan(eclplong_raw) );
|
||||
|
||||
% --- check that rtasc is in the same quadrant as eclplong_raw ----
|
||||
if ( eclplong_raw < 0.0 )
|
||||
eclplong_raw= eclplong_raw + twopi; % make sure it's in 0 to 2pi range
|
||||
end
|
||||
if ( abs( eclplong_raw-rtasc ) > pi*0.5 )
|
||||
rtasc= rtasc + 0.5 *pi*round( (eclplong_raw-rtasc)/(0.5 *pi));
|
||||
end
|
||||
decl = asin( sin(obliquity)*sin(eclplong_raw) );
|
||||
*/
|
||||
Reference in New Issue
Block a user