Skip to content

Instantly share code, notes, and snippets.

@matwey
Last active August 30, 2018 07:36
Show Gist options
  • Select an option

  • Save matwey/de72a0b39ca371a2ca43db3826dde6f4 to your computer and use it in GitHub Desktop.

Select an option

Save matwey/de72a0b39ca371a2ca43db3826dde6f4 to your computer and use it in GitHub Desktop.
TimeAndCoordinate disassembled code
#include <math.h>
#include <string.h>
#include "TimeAndCoordinate.h"
// FIXME: data!!!
char c19[160];
char c18[160];
void Rot123(int a1, double a2, double *a3, double *a4)
{
double v5; // fst7
double v6; // fst6
double v7; // [esp+10h] [ebp-28h]
double v8; // [esp+18h] [ebp-20h]
sincos(a2, &v8, &v7);
v5 = v7;
v6 = v8;
switch ( a1 )
{
case 1:
*a4 = *a3;
a4[1] = a3[1] * v5 + a3[2] * v6;
a4[2] = v5 * a3[2] - v6 * a3[1];
break;
case 2:
*a4 = *a3 * v5 - a3[2] * v6;
a4[1] = a3[1];
a4[2] = v6 * *a3 + v5 * a3[2];
break;
case 3:
*a4 = *a3 * v5 + a3[1] * v6;
a4[1] = v5 * a3[1] - v6 * *a3;
a4[2] = a3[2];
break;
}
}
double Goto2_360(double a1) {
double result; // fst7
double v2; // fst6
double v3; // t1
double v4; // t2
double v5; // fst6
double v6; // fst7
for ( result = a1; result < 0.0; result = result + 360.0 )
;
v2 = 360.0;
if ( result >= 360.0 )
{
while ( 1 )
{
v4 = v2;
v5 = result - v2;
v6 = v4;
if ( v5 < v4 )
break;
v3 = v5;
v2 = v6;
result = v3;
}
result = v5;
}
return result;
}
double AltVisual2Real(double *a1, double a2, double a3, double a4) {
double v4; // fst7
double v5; // fst7
double v6; // fst6
double v7; // fst5
double v8; // ST30_8
double v9; // fst7
double v10; // fst7
double v11; // fst6
double v12; // fst7
double v14; // ST30_8
double v15; // [esp+10h] [ebp-48h]
v4 = a2 * 57.29577951308232;
v15 = v4;
v5 = a3 * 278.0 / 1010.0 / (a4 + 273.0) / tan((7.31 / (v4 + 4.4) + v4) * 0.0174532925199433) / 60.0;
if ( v15 <= 80.0 )
{
v14 = v5;
v6 = v15;
v7 = sin((double)0.0174532925199433 * (14.7 * v5 + 15.0)) * -0.001;
v5 = v14;
}
else
{
v6 = v15;
v7 = 0.0;
}
if ( v6 >= 50.0 )
{
v11 = v5;
v10 = v7;
}
else
{
v8 = v5;
v9 = cos(a2);
v10 = v9 * (-0.00028 * v9) + (double)v7;
v11 = v8;
}
v12 = (v10 + v11) * 0.0174532925199433;
*a1 = v12;
return a2 - v12;
}
double TimeAndCoordinate::GetEpoch(int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
return (double)(a4
+ 1461 * ((a3 - 14) / 12 + a2 + 4800) / 4
+ (367 * a3 + 4404 * ((a3 - 14) / -12) - 734) / 12
- 32075
- 3 * (((a3 - 14) / 12 + a2 + 4900) / 100) / 4)
- 0.5
- 2400000.5
+ (double)a5 / 24.0
+ (double)a6 / 1440.0
+ ((double)a7 + (double)a8 / 1000.0) / 86400.0;
}
double TimeAndCoordinate::GetLMST(double a2, double a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) {
int v10; // eax
double v11; // fst7
char *v12; // edx
int v13; // ecx
double v14; // fst7
double v15; // fst6
double v16; // fst5
double v17; // fst4
double v18; // t1
double v19; // t2
double v20; // fst4
double v21; // fst6
double v22; // tt
double v23; // t0
double v24; // fst5
double v25; // fst6
int v26; // esi
double v27; // fst5
double v28; // fst4
double v29; // fst3
double v30; // fst2
double v31; // tt
double v32; // fst2
double v33; // fst6
double v34; // fst1
double v35; // ST48_8
double v36; // fst1
double v37; // fst6
double v38; // fst7
char *v39; // ST2C_4
double v40; // fst7
double v41; // fst6
double result; // fst7
double v43; // fst6
double v44; // tt
double v45; // t0
double v46; // fst6
double v47; // fst7
double v48; // [esp+40h] [ebp-258h]
double v49; // [esp+48h] [ebp-250h]
char v50[160]; // [esp+50h] [ebp-248h]
char v51[160]; // [esp+F0h] [ebp-1A8h]
double v52; // [esp+190h] [ebp-108h]
double v53; // [esp+198h] [ebp-100h]
double v54; // [esp+1A0h] [ebp-F8h]
double v55; // [esp+1A8h] [ebp-F0h]
double v56; // [esp+1B0h] [ebp-E8h]
double v57; // [esp+1B8h] [ebp-E0h]
double v58; // [esp+1C0h] [ebp-D8h]
double v59; // [esp+1C8h] [ebp-D0h]
double v60; // [esp+1D0h] [ebp-C8h]
double v61; // [esp+1D8h] [ebp-C0h]
double v62; // [esp+1E0h] [ebp-B8h]
double v63; // [esp+1E8h] [ebp-B0h]
double v64; // [esp+1F0h] [ebp-A8h]
double v65; // [esp+1F8h] [ebp-A0h]
double v66; // [esp+200h] [ebp-98h]
double v67; // [esp+208h] [ebp-90h]
double v68; // [esp+210h] [ebp-88h]
double v69; // [esp+218h] [ebp-80h]
double v70; // [esp+220h] [ebp-78h]
double v71; // [esp+228h] [ebp-70h]
double v72; // [esp+230h] [ebp-68h]
double v73; // [esp+238h] [ebp-60h]
double v74; // [esp+240h] [ebp-58h]
double v75; // [esp+248h] [ebp-50h]
double v76; // [esp+250h] [ebp-48h]
double v77; // [esp+258h] [ebp-40h]
double v78; // [esp+260h] [ebp-38h]
double v79; // [esp+268h] [ebp-30h]
double v80; // [esp+270h] [ebp-28h]
double v81; // [esp+278h] [ebp-20h]
v10 = 0;
memcpy(v51, &c18, sizeof(v51));
memcpy(v50, &c19, sizeof(v50));
do
{
*(double *)&v51[8 * v10] = *(double *)&v51[8 * v10] * 0.00000484813681109536;
*(double *)&v50[8 * v10] = *(double *)&v50[8 * v10] * 0.00000484813681109536;
++v10;
}
while ( v10 != 20 );
v11 = TimeAndCoordinate::GetEpoch(a4, a5, a6, a7, a8, a9, a10);
v12 = v51;
v13 = 0;
v14 = (v11 - 0.000002546296296296296 - 51544.5) / 36525.0;
v15 = 477198.86739806 * v14;
v72 = 477198.86739806 * v14;
v73 = 35999.05034 * v14;
v74 = 483202.01753806 * v14;
v75 = 445267.11148 * v14;
v76 = -1934.13626083 * v14;
v16 = 0.0;
while ( 1 )
{
if ( v16 > v15 )
{
do
v15 = v15 + 360.0;
while ( v15 < 0.0 );
}
v17 = 360.0;
if ( v15 >= 360.0 )
{
while ( 1 )
{
v19 = v17;
v20 = v15 - v17;
v21 = v19;
if ( v20 < v19 )
break;
v18 = v20;
v17 = v21;
v15 = v18;
}
v22 = v16;
v24 = v20;
v25 = v22;
}
else
{
v23 = v16;
v24 = v15;
v25 = v23;
}
*(&v77 + v13++) = v24;
if ( v13 == 5 )
break;
v16 = v25;
v15 = *(&v72 + v13);
}
v26 = 0;
v27 = (v77 + 134.96298139 + 0.00869722 * v14 * v14) * 0.0174532925199433;
v77 = v27;
v28 = (v78 + 357.52772333 + -0.00016028 * v14 * v14) * 0.0174532925199433;
v78 = v28;
v29 = (v79 + 93.27191028 + -0.0036825 * v14 * v14) * 0.0174532925199433;
v79 = v29;
v30 = (v80 + 297.85036306 + -0.00191417 * v14 * v14) * 0.0174532925199433;
v80 = v30;
v31 = v30;
v32 = 0.0174532925199433 * (v81 + 125.04452222 + 0.00207083 * v14 * v14);
v33 = v31;
v52 = v32;
v34 = v29 - v31 + v32 + v29 - v31 + v32;
v35 = v34;
v53 = v34;
v36 = v29 + v32 + v29 + v32;
v54 = v36;
v55 = v32 + v32;
v56 = v28;
v57 = v27;
v58 = v35 + v28;
v59 = v29 + v29 + v32;
v60 = v27 + v36;
v61 = v35 - v28;
v62 = v31 * -2.0 + v27;
v63 = (double)(v29 - v31) + (double)(v29 - v31) + v32;
v64 = v36 - v27;
v65 = v27 + v32;
v66 = v33 + v33;
v67 = v29 + v33 + v32 + v29 + v33 + v32 - v27;
v68 = v32 - v27;
v69 = (double)(v29 + v29) + v27 + v32;
v70 = v27 - v33 + v27 - v33;
v71 = v29 - v27 + v29 - v27 + v32;
v49 = 0.0;
v37 = v14;
v38 = v32;
v48 = v37;
while ( 1 )
{
v39 = v12;
v40 = sin(v38);
v12 = v39;
v41 = v48 * *(double *)&v50[8 * v26] + *(double *)&v39[8 * v26];
++v26;
v49 = v40 * v41 + v49;
if ( v26 == 20 )
break;
v38 = *(&v52 + v26);
}
for ( result = (879000.0513367 * v48 + 18.6973746 + v48 * (0.09310400000000001 * v48) / 3600.0) * 15.0
+ cos((-0.01300417 * v48 + 23.43929111) * 0.0174532925199433) * v49 * 57.29577951308232
+ a2; result < 0.0; result = result + 360.0 )
;
v43 = 360.0;
if ( result >= 360.0 )
{
while ( 1 )
{
v45 = v43;
v46 = result - v43;
v47 = v45;
if ( v46 < v45 )
break;
v44 = v46;
v43 = v47;
result = v44;
}
result = v46;
}
return result;
}
void TimeAndCoordinate::Eq2AltAzi(double a2, double a3, double a4, double a5, double a6, int a7, double& a8, double& a9, double& a10)
{
double v10; // fst6
double i; // fst5
double v12; // fst4
double v13; // t2
double v14; // tt
double v15; // fst4
double v16; // fst5
double v17; // ST48_8
double v18; // ST40_8
double v19; // fst7
double v20; // fst7
double v21; // fst7
double v22; // fst6
double j; // fst5
double v24; // fst4
double v25; // t1
double v26; // t2
double v27; // fst4
double v28; // fst5
double v29; // fst7
double v30; // fst7
bool v31; // al
double v32; // fst6
double v33; // tt
double v34; // t0
double v35; // fst6
double v36; // fst7
double *result; // eax
double v38; // fst5
double v39; // [esp+50h] [ebp-48h]
double v40; // [esp+58h] [ebp-40h]
double v41; // [esp+60h] [ebp-38h]
double v42; // [esp+68h] [ebp-30h]
double v43; // [esp+70h] [ebp-28h]
double v44; // [esp+78h] [ebp-20h]
v10 = 0.0174532925199433 * a6;
for ( i = a4 - a2; i < 0.0; i = i + 360.0 )
;
v12 = 360.0;
if ( i >= 360.0 )
{
while ( 1 )
{
v14 = v12;
v15 = i - v12;
v16 = v14;
if ( v15 < v14 )
break;
v13 = v15;
v12 = v16;
i = v13;
}
i = v15;
}
sincos(a3 * 0.0174532925199433,
&v44,
&v43);
v42 = v43;
v40 = v44;
sincos(v10, &v44, &v43);
v17 = v43;
v18 = v44;
sincos((double)i * (double)0.0174532925199433,
&v44,
&v43);
v41 = v43;
v39 = v44;
v19 = asin(v18 * v40 + v17 * v42 * v43);
a9 = v19;
v20 = cos(v19);
v21 = 3.141592653589793 - atan2(-v42 * v39 / v20, (v18 * v42 * v41 - v17 * v40) / v20);
v22 = (double)v10;
if ( v21 < 0.0 )
v21 = v21 + 6.283185307179586;
for ( j = 57.29577951308232 * a9; j < 0.0; j = j + 360.0 )
;
v24 = 360.0;
if ( j >= 360.0 )
{
while ( 1 )
{
v26 = v24;
v27 = j - v24;
v28 = v26;
if ( v27 < v26 )
break;
v25 = v27;
v24 = v28;
j = v25;
}
j = v27;
}
a9 = j;
a8 = v21 * 57.29577951308232;
v29 = tan(v22);
v30 = atan2(v39, v29 * v42 - v40 * v41) * (double)57.29577951308232;
if ( a7 != 1 )
v30 = v30 + a9;
if ( v30 >= 0.0 )
{
v38 = v30;
if ( v30 < 360.0 )
goto LABEL_28;
v30 = v30 - 360.0;
v31 = 0.0 > v38 - 360.0;
}
else
{
v30 = v30 + 360.0;
v31 = 0.0 > v30;
}
if ( v31 )
{
do
v30 = v30 + 360.0;
while ( v30 < 0.0 );
}
v32 = 360.0;
if ( v30 >= 360.0 )
{
while ( 1 )
{
v34 = v32;
v35 = v30 - v32;
v36 = v34;
if ( v35 < v34 )
break;
v33 = v35;
v32 = v36;
v30 = v33;
}
v30 = v35;
}
LABEL_28:
a10 = v30;
}
void TimeAndCoordinate::AltAzi2Eq(double a2, double a3, double a4, double a5, double a6, double& a7, double& a8)
{
double v8; // ST60_8
double v9; // ST58_8
double v10; // ST68_8
double v11; // ST50_8
double v12; // ST00_8
double v13; // ST30_8
double v14; // ST20_8
double v15; // fst7
double v16; // fst7
double i; // fst7
double v18; // fst5
double v19; // t0
double v20; // t1
double v21; // fst5
double v22; // fst7
double v23; // fst6
double v24; // fst7
double *result; // eax
double v26; // [esp+10h] [ebp-78h]
double v27; // [esp+70h] [ebp-18h]
double v28; // [esp+78h] [ebp-10h]
sincos(a6 * 0.0174532925199433,
&v28,
&v27);
v8 = v27;
v9 = v28;
sincos(a2 * -0.0174532925199433 + 3.141592653589793,
&v28,
&v27);
v10 = v27;
v11 = v28;
v12 = (double)-0.0174532925199433 * a3 + 1.570796326794897;
sincos(v12, &v28, &v27);
v13 = v28;
v14 = v27;
v15 = asin(v9 * v27 - v8 * v28 * v10);
v26 = v15;
v16 = cos(v15);
for ( i = atan2(-v13 * v11 / v16, (v14 * v8 + v9 * v13 * v10) / v16) * -57.29577951308232 + a4; i < 0.0; i = i + 360.0 )
;
v18 = 360.0;
if ( i >= 360.0 )
{
while ( 1 )
{
v20 = v18;
v21 = i - v18;
v22 = v20;
if ( v21 < v20 )
break;
v19 = v21;
v18 = v22;
i = v19;
}
v23 = v21;
v24 = v26;
}
else
{
v23 = i;
v24 = v26;
}
a7 = v23;
a8 = v24 * 57.29577951308232;
}
void TimeAndCoordinate::Epoch2Actual(double a2, double a3, double a4, double& a5, double& a6)
{
double v6; // ST58_8
double v7; // ST00_8
double v8; // ST30_8
double v9; // fst5
double v10; // ST40_8
double v11; // ST30_8
double i; // fst7
double v13; // fst6
double v14; // tt
double v15; // t0
double v16; // fst6
double v17; // fst7
double v18; // [esp+60h] [ebp-88h]
double v19; // [esp+68h] [ebp-80h]
double v20; // [esp+70h] [ebp-78h]
double v21; // [esp+88h] [ebp-60h]
double v22; // [esp+A0h] [ebp-48h]
double v23; // [esp+A8h] [ebp-40h]
double v24; // [esp+B0h] [ebp-38h]
double v25; // [esp+B8h] [ebp-30h]
double v26; // [esp+C0h] [ebp-28h]
double v27; // [esp+C8h] [ebp-20h]
sincos(a2 * 0.0174532925199433,
&v19,
&v18);
v6 = v19;
v7 = (double)0.0174532925199433 * a3;
v8 = v18;
sincos(v7, &v19, &v18);
v25 = v8 * v18;
v26 = v18 * v6;
v27 = v19;
v9 = (a4 - 51544.5) / 36525.0;
v10 = v9;
Rot123(3, -((0.30188 * v9 * v9 + 2306.2181 * v9) / 206264.806246), &v25, &v21);
Rot123(2, (v10 * (-0.42665 * v10) + 2004.3109 * v10) / (double)206264.806246, &v21, &v20);
Rot123(3, -((v10 * (1.09468 * v10) + (double)(2306.2181 * v9)) / (double)206264.806246), &v20, &v22);
v11 = sqrt(v22 * v22 + v23 * v23);
a5 = atan2(v23, v22) * 57.29577951308232;
a6 = atan2(v24, v11) * (double)57.29577951308232;
for ( i = a5; i < 0.0; i = i + 360.0 )
;
v13 = 360.0;
if ( i >= 360.0 )
{
while ( 1 )
{
v15 = v13;
v16 = i - v13;
v17 = v15;
if ( v16 < v15 )
break;
v14 = v16;
v13 = v17;
i = v14;
}
i = v16;
}
a5 = i;
}
void TimeAndCoordinate::Actual2Epoch(double a2, double a3, double a4, double& a5, double& a6)
{
double v6; // ST58_8
double v7; // ST00_8
double v8; // ST30_8
double v9; // fst5
double v10; // ST40_8
double v11; // ST30_8
double i; // fst7
double v13; // fst6
double v14; // t0
double v15; // t1
double v16; // fst6
double v17; // fst7
double v18; // [esp+60h] [ebp-88h]
double v19; // [esp+68h] [ebp-80h]
double v20; // [esp+70h] [ebp-78h]
double v21; // [esp+88h] [ebp-60h]
double v22; // [esp+A0h] [ebp-48h]
double v23; // [esp+A8h] [ebp-40h]
double v24; // [esp+B0h] [ebp-38h]
double v25; // [esp+B8h] [ebp-30h]
double v26; // [esp+C0h] [ebp-28h]
double v27; // [esp+C8h] [ebp-20h]
sincos(a3 * 0.0174532925199433,
&v19,
&v18);
v6 = v19;
v7 = (double)0.0174532925199433 * a4;
v8 = v18;
sincos(v7, &v19, &v18);
v25 = v8 * v18;
v26 = v18 * v6;
v27 = v19;
v9 = (a2 - 51544.5) / 36525.0;
v10 = v9;
Rot123(3, (1.09468 * v9 * v9 + 2306.2181 * v9) / 206264.806246, &v25, &v21);
Rot123(2, -((v10 * (-0.42665 * v10) + 2004.3109 * v10) / (double)206264.806246), &v21, &v20);
Rot123(3, (v10 * (0.30188 * v10) + (double)(2306.2181 * v9)) / (double)206264.806246, &v20, &v22);
v11 = sqrt(v22 * v22 + v23 * v23);
a5 = atan2(v23, v22) * 57.29577951308232;
a6 = atan2(v24, v11) * (double)57.29577951308232;
for ( i = a5; i < 0.0; i = i + 360.0 )
;
v13 = 360.0;
if ( i >= 360.0 )
{
while ( 1 )
{
v15 = v13;
v16 = i - v13;
v17 = v15;
if ( v16 < v15 )
break;
v14 = v16;
v13 = v17;
i = v14;
}
i = v16;
}
a5 = i;
}
#pragma once
class TimeAndCoordinate
{
public:
/**
*程序功能:将J2000历元下的赤经赤纬转换至当前历元下赤经赤纬
*参数:
*inRA - 输入赤经,量纲:角度
*inDEC - 输入赤纬,量纲:角度
*outEpoch - 输入当前历元。量纲:简约儒略日(MJD)
*outRA - 输出赤经,量纲:角度
*outDEC - 输出赤纬,量纲:角度
*****************************************************************************************
* inRA - input Right ascension(decimal degree)
* inDEC - input Declination(decimal degree)
* outEpoch - output Epoch。(real epoch)
* outRA - output Right ascension(decimal degree)
* outDEC - output Declination(decimal degree)
*Return:void
*Notes:Convert the Right ascension and Declination from J2000 to real epoch
**/
void Epoch2Actual(double inRA,double inDEC,double outEpoch,double &outRA, double &outDEC);
/**
*程序功能:将当前历元下的赤经赤纬转换至J2000历元下赤经赤纬
*inEpoch - 输入当前历元。量纲:简约儒略日
*inRA - 输入赤经,量纲:角度
*inDEC - 输入赤纬,量纲:角度
*outRA - 输出赤经,量纲:角度
*outDEC - 输出赤纬,量纲:角度
*****************************************************************************************
* inEpoch - input Epoch。(real epoch)
* inRA - input Right ascension(decimal degree)
* inDEC - input Declination(decimal degree)
* outRA - output Right ascension(decimal degree)
* outDEC - output Declination(decimal degree)
*Return: void
*Notes: Convert the Right ascension and Declination from real epoch to J2000
**/
void Actual2Epoch(const double inEpoch, double inRA, double inDEC,double& outRA, double& outDEC) ;
/**
*程序功能:将年月日时分秒形式的日期转换为以简约儒略日表示的历元
*Year - 年份,UTC时间
*Month - 月份,UTC时间
*Day – 日数,UTC时间
*Hour - 小时,UTC时间
*Minute - 分钟,UTC时间
*Second - 秒,UTC时间
*MicroSec - 微秒,UTC时间
*返回值:Epoch - 简约儒略日,UTC时间
*****************************************************************************************
* Year - Year, UTC(coordinated universal time)
* Month - Month, UTC(coordinated universal time)
* Day - Day, UTC(coordinated universal time)
* Hour - Hour, UTC(coordinated universal time)
* Minute - Minute, UTC(coordinated universal time)
* Second - Second, UTC(coordinated universal time)
* MicroSec - Microsecond, UTC(coordinated universal time)
*Return:modified Julian date **/
double GetEpoch(int Year,int Month,int Day,int Hour,int Minute,int Second,int MicroSec);
/**
*程序功能:获取输入地理经纬度当地的地方恒星时计算
*Lgt - 地理经度,量纲:角度,东经为正
*Lat - 地理纬度,量纲:角度,北纬为正
*Year - 年份,UTC时间
*Month - 月份,UTC时间
*Day - 日数,UTC时间
*Hour - 小时,UTC时间
*Minute - 分钟,UTC时间
*Second - 秒,UTC时间
*MicroSec - 微秒,UTC时间
*返回值: LMST - 地方恒星时,(角度)
*****************************************************************************************
* Lgt - longitude (decimal degree, east longitude is positive)
* Lat - latitude (decimal degree, northern latitude is positive)
* Year - Year, UTC(coordinated universal time)
* Month - Month, UTC(coordinated universal time)
* Day - Day, UTC(coordinated universal time)
* Hour - Hour, UTC(coordinated universal time)
* Minute - Minute, UTC(coordinated universal time)
* Second - Second, UTC(coordinated universal time)
* MicroSec - Microsecond, UTC(coordinated universal time)
*Return:local sidereal time (decimal degree)
**/
double GetLMST(double Lgt,double Lat,int Year,int Month,int Day,int Hour,int Minute,int Second,int MicroSec);
/**
*程序功能:将测站地平坐标系下方位角、高度角转换至赤道坐标系下赤经赤纬
*Azi - 输入方位角,量纲:角度,北零点
*Alt - 输入俯仰角,量纲:角度,水平零点
*LMST - 输入本地恒星时,量纲:角度
*Lgt - 输入地理经度,量纲:角度,东经为正
*Lat - 输入地理纬度,量纲:角度,北纬为正
*RA - 输出赤经,量纲:角度,坐标系:当前历元
*DEC - 输出赤纬,量纲:角度,坐标系:当前历元
*****************************************************************************************
* Azi - input Azimuth (decimal degree, North zero)
* Alt - input Altitude (decimal degree, horizon zero)
* LMST - input Local Mean sidereal time (decimal degree)
* Lgt - input longitude(decimal degree, east longitude is positive)
* Lat - input latitude(decimal degree, northern latitude is positive)
* RA - output Right ascension(decimal degree,(Coordinate system: real epoch)
* DEC - output Declination(decimal degree Coordinate system: real epoch)
*Return:void
*notes:Transfer function from horizontal coordinate system to equatorial coordinate system.
**/
void AltAzi2Eq(double Azi, double Alt, double LMST, double Lgt, double Lat, double &RA, double &DEC);
/**
*程序功能:将测站赤道坐标系下赤经赤纬转换至地平坐标系下方位角、高度角,同时根据焦点类型的选择确定像场旋转角
*RA - 输入赤经,量纲:角度,坐标系:当前历元
*DEC - 输入赤纬,量纲:角度,坐标系:当前历元
*LMST - 输入本地恒星时,量纲:角度
*Lgt - 输入地理经度,量纲:角度,东经为正
*Lat - 输入地理纬度,量纲:角度,北纬为正
*Focus - 输入焦点类型。1:卡焦;2:东耐焦;3:西耐焦
*Azi - 输出方位角,量纲:角度,北零点
*Alt - 输出俯仰角,量纲:角度,水平零点
*Rot - 输出像场旋转角,量纲:角度
*****************************************************************************************
* RA - input Right ascension(decimal degree,(Coordinate system: real epoch)
* DEC - input Declination(decimal degree Coordinate system: real epoch)
* LMST - input Local Mean sidereal time (decimal degree)
* Lgt - input longitude(decimal degree, east longitude is positive)
* Lat - input latitude(decimal degree, northern latitude is positive)
* Focus - input Focus type. 1: Cassegrain focus; 2: East Nasmyth focus 3: West Nasmyth focus
* Azi - output Azimuth (decimal degree, North zero)
* Alt - output Altitude (decimal degree, horizon zero)
* Rot - output Rotation angle of image field(dimension: decimal degree)
*Return:void
*Notes:Transfer function from equatorial coordinate system to horizontal coordinate system.
**/
void Eq2AltAzi(double RA,double DEC,double LMST,double Lgt,double Lat,int Focus,double &Azi,double &Alt,double &Rot);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment