Skip to content

Instantly share code, notes, and snippets.

@Kirilliann
Created June 1, 2013 10:22
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kirilliann/5689926 to your computer and use it in GitHub Desktop.
Save Kirilliann/5689926 to your computer and use it in GitHub Desktop.
//=========================Значение радиана в градусах====================================================
var rad=180/Math.PI
//=========================Тригонометрические функции с углами в градусах=================================
//-----------------------Синус----------------------
function sind(a){
return (Math.sin(a*Math.PI/180))
}
//---------------------Косинус-----------------------
function cosd(a){
return (Math.cos(a*Math.PI/180))
}
//=========================================================================================================
//===================================Логарифм от а с основание b===========================================
function log_2(a,b){
return (Math.log(a)/Math.log(b))
}
//=========================================================================================================
//=======================Функция перевода горизонтальных координат в экваториальные========================
function horizontal_to_equatorial(h, phi, A,s) { //На входе получаем h-высота светила, phi-широта места наблюдений, A-азимут светила,s-текущее звездное время
A=((A+180)%360); //Переводим азимут в нужный диапазон величин
var sinb=sind(h)*sind(phi)+cosd(h)*cosd(phi)*cosd(A); //Синус склонения
var cosh=(sind(h)-sind(phi)*sinb)/(cosd(phi)*Math.sqrt(1-sinb*sinb)); //Косинус часового угла
var H1=Math.acos(cosh)*rad; //Значение часового угла
if (Math.sin(A)<0){ //Перевод часового угла в нужный диапазон величин
var H=H1;
} else {
var H=360-H1;
}
var delta=Math.asin(sinb)*rad; //Склонение
var Alpha=360+s-H; //Прямое восхождение
return [Alpha, delta] //Выводим результат в виде массива вида [Восхождение, склонение]
}
//=========================================================================================================
//==========================Перевод экваториальных координат в горизонтальные==============================
function equatorial_to_horizontal(d, t, phi){ //На входе получаем d-склонение t-часовой угол phi-широта места наблюдения
var z=Math.acos(sind(phi)*sind(d)+cosd(phi)*cosd(d)*cosd(t))*rad; //Зенитное расстояние
var sinAzr=(cosd(d)*sind(t)/sind(z)); //Синус азимута
var cosAzr=((-cosd(phi)*sind(d)+sind(phi)*cosd(d)*cosd(t))/sind(z)); //Косинус азимута
var Azr=Math.atan2(sinAzr,cosAzr)*rad //Значение азимута
return [Azr,z]; //Выводим результат в виде массива вида [азимут, зенитка]
}
//============================================================================================================
//========================Атмосферная рефракция=================================================================
function tand(a){
return (Math.tan(a*Math.PI/180))
}
function atmospheric_refraction(z){ //Зенитное расстояние в градусах
var h=90-z;
var a_componenta=10.3/(h+5.11);
var b_componenta=tand(h+a_componenta);
var refraction=1.02/b_componenta;
var z_result=z-refraction/60;
return z_result
}
//============================================Колицество дней в месяце================================================================
function getdays(year,ii){
month[0]=31;
if (year%4==0){
month[1]=29;
}else{
month[1]=28;
}
month[2]=31;
month[3]=30;
month[4]=31;
month[5]=30;
month[6]=31;
month[7]=31;
month[8]=30;
month[9]=31;
month[10]=30;
month[11]=31;
return month[ii]
}
//=============================================Массив названий месяцев============================================
var month=new Array(12);
month[0]="Января";
month[1]="Февраля";
month[2]="Марта";
month[3]="Апреля";
month[4]="Мая";
month[5]="Июня";
month[6]="Июля";
month[7]="Августа";
month[8]="Сентября";
month[9]="Октября";
month[10]="Ноября";
month[11]="Декабря";
//===============================================================================================================
//=====================================Кадендарные функции=======================================================
//----------------------------------Из юлианской даты в календарную---------------------------------------------
function compute_from_JD(JD){
var F,A,B,C,E,G, d,I,m,y,D1,hour, minute;
I= Math.floor(JD+0.5);
F=JD+0.5-Math.floor(JD+0.5);
if (I>2299160){
A=Math.floor((I-1867216.25)/(36524.25));
B=I+1+A-Math.floor(A/4)
}else{A=I;B=I};
C=B+1524;
D1=Math.floor((C-122.1)/(365.25));
E=Math.floor(365.25*D1);
G=Math.floor((C-E)/(30.6001));
d=C-E+F-Math.floor(30.6001*G); //день
if (G<13.5){m=G-1}else{m=G-13}; //месяц
if (m>2.5) {y=D1-4716} else {y=D1-4715} //год
hour=Math.floor(24*(d-Math.floor(d))) //час
minute=Math.floor(60*(24*(d-Math.floor(d)))-60*hour) //минута
return [y,m,d,hour,minute]
}
//---------------------------Из календарной в юлианскую--------------------------------------------------------
function compute_to_JD(year,month,day,hour,min){
var a=Math.floor((14-month)/12);
var y=year+4800-a;
var m=month+12*a-3;
var jd=day+(Math.floor(((153*m)+2)/5)+Math.floor(365*y)+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400)-32045+(hour-12)/24+min/(1440));
return jd
}
//-------------------------------------------------------------------------------------------------------------
//=========================Стандартная запись времени=====================================
function timefloor(t){
var hour=Math.floor(t);
var min=Math.floor(t*60-hour*60);
var res=hour+':'+min;
return res
}
//===============================================Преобразование в стандартную запись координат=============================
function alphafloor(t){
var hour=Math.floor(t);
var min=Math.floor(t*60-hour*60);
var res=hour+'<sup>h</sup>'+min+'<sup>m</sup>';
return res
}
function deltafloor(a){
var houra=Math.floor(a);
var mina=Math.floor(a*60-houra*60);
var resa=houra+'&deg;'+mina+'`';
return resa
}
//======================================Получение текущего времени=========================================================================
function gettime(a){
var d=Math.floor(a/24);
var h=Math.floor(a-d*24);
var min=Math.floor((a-d*24)*60-h*60);
return [min,h,d]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment