ilib
Version:
iLib is a cross-engine library of internationalization (i18n) classes written in pure JS
1 lines • 8.54 kB
JavaScript
var ilib=require("./ilib.js");var Utils=require("./Utils.js");var MathUtils=require("./MathUtils.js");var SearchUtils=require("./SearchUtils.js");var GregorianDate=require("./GregorianDate.js");var RataDie=require("./RataDie.js");var GregRataDie=require("./GregRataDie.js");var Astro={};Astro.initAstro=function(r,t,o){if(!ilib.data.astro){Utils.loadData({name:"astro.json",locale:"-",nonLocale:true,sync:r,loadParams:t,callback:ilib.bind(this,function(r){ilib.data.astro=r;if(o&&typeof o==="function"){o(r)}})})}else{if(o&&typeof o==="function"){o(ilib.data.astro)}}};Astro._dtr=function(r){return r*Math.PI/180};Astro._rtd=function(r){return r*180/Math.PI};Astro._dcos=function(r){return Math.cos(Astro._dtr(r))};Astro._dsin=function(r){return Math.sin(Astro._dtr(r))};Astro._dtan=function(r){return Math.tan(Astro._dtr(r))};Astro._fixangle=function(r){return r-360*Math.floor(r/360)};Astro._fixangr=function(r){return r-2*Math.PI*Math.floor(r/(2*Math.PI))};Astro._equinox=function(r,t){var o,a,n,i,e,s,l,_,f,A;if(r<1e3){s=ilib.data.astro._JDE0tab1000;A=r/1e3}else{s=ilib.data.astro._JDE0tab2000;A=(r-2e3)/1e3}i=s[t][0]+s[t][1]*A+s[t][2]*A*A+s[t][3]*A*A*A+s[t][4]*A*A*A*A;_=(i-2451545)/36525;f=35999.373*_-2.47;o=1+.0334*Astro._dcos(f)+7e-4*Astro._dcos(2*f);l=0;n=0;for(a=0;a<24;a++){l+=ilib.data.astro._EquinoxpTerms[n]*Astro._dcos(ilib.data.astro._EquinoxpTerms[n+1]+ilib.data.astro._EquinoxpTerms[n+2]*_);n+=3}e=i+l*1e-5/o;return e};Astro._deltat=function(r){var t,o,a,n;if(r>=1620&&r<=2014){a=Math.floor(r-1620);o=r-1620-a;t=ilib.data.astro._deltaTtab[a]+(ilib.data.astro._deltaTtab[a+1]-ilib.data.astro._deltaTtab[a])*o}else{n=(r-2e3)/100;if(r<948){t=2177+497*n+44.1*n*n}else{t=102+102*n+25.3*n*n;if(r>2e3&&r<2100){t+=.37*(r-2100)}}}return t};Astro._obliqeq=function(r){var t,o,a,n;a=o=(r-2451545)/3652500;t=23+26/60+21.448/3600;if(Math.abs(o)<1){for(n=0;n<10;n++){t+=ilib.data.astro._oterms[n]/3600*a;a*=o}}return t};Astro._sunpos=function(r){var t={},o,a,n,i,e,s;o=(r-2451545)/36525;a=o*o;n=o*a;t.meanLongitude=Astro._fixangle(280.46646+36000.76983*o+3032e-7*a);t.meanAnomaly=Astro._fixangle(357.52911+35999.05029*o-1537e-7*a-4.8e-7*n);t.eccentricity=.016708634-42037e-9*o-1.267e-7*a;t.equationOfCenter=(1.914602-.004817*o-14e-6*a)*Astro._dsin(t.meanAnomaly)+(.019993-101e-6*o)*Astro._dsin(2*t.meanAnomaly)+289e-6*Astro._dsin(3*t.meanAnomaly);t.sunLongitude=t.meanLongitude+t.equationOfCenter;i=125.04-1934.136*o;t.apparentLong=t.sunLongitude+-.00569+-.00478*Astro._dsin(i);s=Astro._obliqeq(r);e=s+.00256*Astro._dcos(i);t.inclination=Astro._fixangle(23.4392911-.013004167*o-1.6389e-7*a+5.036e-7*n);t.apparentRightAscension=Astro._fixangle(Astro._rtd(Math.atan2(Astro._dcos(e)*Astro._dsin(t.apparentLong),Astro._dcos(t.apparentLong))));return t};Astro._nutation=function(r){var t,o,a=(r-2451545)/36525,n,i,e,s=[],l=0,_=0,f,A={};i=a*(n=a*a);s[0]=Astro._dtr(297.850363+445267.11148*a-.0019142*n+i/189474);s[1]=Astro._dtr(357.52772+35999.05034*a-1603e-7*n-i/3e5);s[2]=Astro._dtr(134.96298+477198.867398*a+.0086972*n+i/56250);s[3]=Astro._dtr(93.27191+483202.017538*a-.0036825*n+i/327270);s[4]=Astro._dtr(125.04452-1934.136261*a+.0020708*n+i/45e4);for(t=0;t<5;t++){s[t]=Astro._fixangr(s[t])}e=a/10;for(t=0;t<63;t++){f=0;for(o=0;o<5;o++){if(ilib.data.astro._nutArgMult[t*5+o]!=0){f+=ilib.data.astro._nutArgMult[t*5+o]*s[o]}}l+=(ilib.data.astro._nutArgCoeff[t*4+0]+ilib.data.astro._nutArgCoeff[t*4+1]*e)*Math.sin(f);_+=(ilib.data.astro._nutArgCoeff[t*4+2]+ilib.data.astro._nutArgCoeff[t*4+3]*e)*Math.cos(f)}A.deltaPsi=l/(3600*1e4);A.deltaEpsilon=_/(3600*1e4);return A};Astro._equationOfTime=function(r){var t,o,a,n,i,e,s;e=(r-2451545)/365250;i=280.4664567+360007.6982779*e+.03032028*e*e+e*e*e/49931+-(e*e*e*e/15300)+-(e*e*e*e*e/2e6);i=Astro._fixangle(i);s=Astro._sunpos(r);t=s.apparentRightAscension;var l=Astro._nutation(r);o=l.deltaPsi;n=Astro._obliqeq(r)+l.deltaEpsilon;a=i-.0057183-t+o*Astro._dcos(n);if(a>180){a-=360}a=a*4;a=a/(24*60);return a};Astro._poly=function(r,t){var o=t[0];var a=r;for(var n=1;n<t.length;n++){o+=t[n]*a;a*=r}return o};Astro._universalFromLocal=function(r,t){return r-t/1440};Astro._localFromUniversal=function(r,t){return r+t/1440};Astro._aberration=function(r){return 974e-7*Astro._dcos(177.63+35999.01847999999*r)-.005575};Astro._nutation2=function(r){var t=Astro._poly(r,ilib.data.astro._nutCoeffA);var o=Astro._poly(r,ilib.data.astro._nutCoeffB);return-.004778*Astro._dsin(t)-3667e-7*Astro._dsin(o)};Astro._ephemerisCorrection=function(r){var t=GregorianDate._calcYear(r-1721424.5);if(1988<=t&&t<=2019){return(t-1933)/86400}if(1800<=t&&t<=1987){var o=new GregRataDie({year:t,month:7,day:1,hour:0,minute:0,second:0});var a=(o.getRataDie()-693596)/36525;return Astro._poly(a,1900<=t?ilib.data.astro._coeff19th:ilib.data.astro._coeff18th)}if(1620<=t&&t<=1799){t-=1600;return(196.58333-4.0675*t+.0219167*t*t)/86400}var n=new GregRataDie({year:t,month:1,day:1,hour:0,minute:0,second:0});var i=.5+(n.getRataDie()-660724);return(i*i/41048480-15)/86400};Astro._ephemerisFromUniversal=function(r){return r+Astro._ephemerisCorrection(r)};Astro._universalFromEphemeris=function(r){return r-Astro._ephemerisCorrection(r)};Astro._julianCenturies=function(r){return(Astro._ephemerisFromUniversal(r)-2451545)/36525};Astro._solarLongitude=function(r){var t=Astro._julianCenturies(r),o=0,a=ilib.data.astro._solarLongCoeff.length,n;for(var i=0;i<a;i++){o+=ilib.data.astro._solarLongCoeff[i]*Astro._dsin(ilib.data.astro._solarLongAddends[i]+ilib.data.astro._solarLongMultipliers[i]*t)}o*=5729577951308232e-21;o+=282.7771834+36000.76953744*t;o+=Astro._aberration(t)+Astro._nutation2(t);return Astro._fixangle(o)};Astro._lunarLongitude=function(r){var t=Astro._julianCenturies(r),o=Astro._fixangle(Astro._poly(t,ilib.data.astro._meanMoonCoeff)),a=Astro._fixangle(Astro._poly(t,ilib.data.astro._elongationCoeff)),n=Astro._fixangle(Astro._poly(t,ilib.data.astro._solarAnomalyCoeff)),i=Astro._fixangle(Astro._poly(t,ilib.data.astro._lunarAnomalyCoeff)),e=Astro._fixangle(Astro._poly(t,ilib.data.astro._moonFromNodeCoeff)),s=Astro._poly(t,ilib.data.astro._eCoeff);var l=0;for(var _=0;_<ilib.data.astro._lunarElongationLongCoeff.length;_++){var f=ilib.data.astro._solarAnomalyLongCoeff[_];l+=ilib.data.astro._sineCoeff[_]*Math.pow(s,Math.abs(f))*Astro._dsin(ilib.data.astro._lunarElongationLongCoeff[_]*a+f*n+ilib.data.astro._lunarAnomalyLongCoeff[_]*i+ilib.data.astro._moonFromNodeLongCoeff[_]*e)}var A=l/1e6;var u=3958/1e6*Astro._dsin(119.75+t*131.849);var d=318/1e6*Astro._dsin(53.09+t*479264.29);var c=1962/1e6*Astro._dsin(o-e);return Astro._fixangle(o+A+u+d+c+Astro._nutation2(t))};Astro._newMoonTime=function(r){var t=r-24724;var o=t/1236.85;var a=Astro._poly(o,ilib.data.astro._nmApproxCoeff);var n=Astro._poly(o,ilib.data.astro._nmCapECoeff);var i=Astro._poly(o,ilib.data.astro._nmSolarAnomalyCoeff);var e=Astro._poly(o,ilib.data.astro._nmLunarAnomalyCoeff);var s=Astro._poly(o,ilib.data.astro._nmMoonArgumentCoeff);var l=Astro._poly(o,ilib.data.astro._nmCapOmegaCoeff);var _=-17e-5*Astro._dsin(l);for(var f=0;f<ilib.data.astro._nmSineCoeff.length;f++){_=_+ilib.data.astro._nmSineCoeff[f]*Math.pow(n,ilib.data.astro._nmEFactor[f])*Astro._dsin(ilib.data.astro._nmSolarCoeff[f]*i+ilib.data.astro._nmLunarCoeff[f]*e+ilib.data.astro._nmMoonCoeff[f]*s)}var A=0;for(var f=0;f<ilib.data.astro._nmAddConst.length;f++){A=A+ilib.data.astro._nmAddFactor[f]*Astro._dsin(ilib.data.astro._nmAddConst[f]+ilib.data.astro._nmAddCoeff[f]*t)}var u=325e-6*Astro._dsin(Astro._poly(o,ilib.data.astro._nmExtra));return Astro._universalFromEphemeris(a+_+u+A+RataDie.gregorianEpoch)};Astro._lunarSolarAngle=function(r){var t=Astro._lunarLongitude(r);var o=Astro._solarLongitude(r);return Astro._fixangle(t-o)};Astro._newMoonBefore=function(r){var t=Astro._lunarSolarAngle(r);var o=Math.round((r-11.450086114414322-RataDie.gregorianEpoch)/29.530588853-t/360)-1;var a,n;a=n=Astro._newMoonTime(o);while(a<r){o++;n=a;a=Astro._newMoonTime(o)}return n};Astro._newMoonAtOrAfter=function(r){var t=Astro._lunarSolarAngle(r);var o=Math.round((r-11.450086114414322-RataDie.gregorianEpoch)/29.530588853-t/360);var a;while((a=Astro._newMoonTime(o))<r){o++}return a};Astro._nextSolarLongitude=function(r,t){var o=365.242189/360;var a=r+o*Astro._fixangle(t-Astro._solarLongitude(r));var n=Math.max(r,a-5);var i=a+5;return SearchUtils.bisectionSearch(0,n,i,1e-6,function(r){return 180-Astro._fixangle(Astro._solarLongitude(r)-t)})};Astro._floorToJD=function(r){return Math.floor(r-.5)+.5};Astro._ceilToJD=function(r){return Math.ceil(r+.5)-.5};module.exports=Astro;