Last active
August 30, 2018 07:36
-
-
Save matwey/de72a0b39ca371a2ca43db3826dde6f4 to your computer and use it in GitHub Desktop.
TimeAndCoordinate disassembled code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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