Changeset 27838 for branches/tap_branches/Ohana/src/opihi/cmd.astro/altaz.c
- Timestamp:
- May 3, 2010, 8:41:49 AM (16 years ago)
- Location:
- branches/tap_branches
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/tap_branches
- Property svn:mergeinfo changed
-
branches/tap_branches/Ohana
-
Property svn:mergeinfo
set to (toggle deleted branches)
/trunk/Ohana merged eligible /branches/eam_branches/Ohana.20100407 27635-27772 /branches/pap_delete/Ohana 27530-27595
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/tap_branches/Ohana/src/opihi/cmd.astro/altaz.c
r17282 r27838 4 4 # define dSIN(A) ((double) sin ((double)RAD_DEG*A)) 5 5 6 int HD_to_AZ(double *alt, double *az, double *rot, double ha, double dec, double lat); 7 int AZ_to_HD(double *ha, double *dec, double *rot, double alt, double az, double lat); 8 6 9 double atan2 (double y, double x); 7 10 8 11 int altaz (int argc, char **argv) { 9 12 13 int i; 10 14 double alt, az, lat, rot; 11 15 double ha, dec; 12 double sind, sinh, cosh;13 16 char *latstr; 17 Vector *hvec, *dvec, *avec, *zvec, *rvec; 18 opihi_flt *Hv, *Dv, *Av, *Zv, *Rv; 14 19 15 if (argc != 6) goto usage; 16 17 if (!strcmp (argv[1], "-h")) goto radec; 18 if (!strcmp (argv[1], "-c")) goto altaz; 19 20 radec: 21 /* ha/dec -> alt/az */ 22 ha = atof (argv[2]); 23 dec = atof (argv[3]); 20 if (argc != 7) goto usage; 21 if (strcasecmp (argv[4], "to")) goto usage; 24 22 25 23 latstr = get_variable ("LATITUDE"); 26 24 if (latstr == (char *) NULL) { 27 25 gprint (GP_ERR, "please define $LATITUDE\n"); 28 return (FALSE);26 return FALSE; 29 27 } 30 28 lat = atof (latstr); 29 gprint (GP_ERR, "using latitude of %f\n", lat); 31 30 free (latstr); 32 31 32 if (!strcmp (argv[1], "-az")) goto radec; 33 if (!strcmp (argv[1], "-hd")) goto altaz; 34 35 radec: 36 if (ISNUM(argv[2][0]) && ISNUM(argv[3][0])) { 37 /* ha/dec -> alt/az */ 38 ha = atof (argv[2]); 39 dec = atof (argv[3]); 40 41 HD_to_AZ (&alt, &az, &rot, ha, dec, lat); 42 43 set_variable (argv[5], alt); 44 set_variable (argv[6], az); 45 set_variable ("ROT", rot); 46 return TRUE; 47 } 48 49 /* find vectors */ 50 if ((hvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return FALSE; 51 if ((dvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return FALSE; 52 if ((avec = SelectVector (argv[5], ANYVECTOR, TRUE)) == NULL) return FALSE; 53 if ((zvec = SelectVector (argv[6], ANYVECTOR, TRUE)) == NULL) return FALSE; 54 if ((rvec = SelectVector ("ROT", ANYVECTOR, TRUE)) == NULL) return FALSE; 55 56 if (hvec[0].Nelements != dvec[0].Nelements) { 57 gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[2], argv[3]); 58 return FALSE; 59 } 60 61 // cast xvec or yvec to FLT if it is type INT 62 CastVector (hvec, OPIHI_FLT); 63 CastVector (dvec, OPIHI_FLT); 64 ResetVector (avec, OPIHI_FLT, hvec[0].Nelements); 65 ResetVector (zvec, OPIHI_FLT, hvec[0].Nelements); 66 ResetVector (rvec, OPIHI_FLT, hvec[0].Nelements); 67 68 Hv = hvec[0].elements.Flt; 69 Dv = dvec[0].elements.Flt; 70 Av = avec[0].elements.Flt; 71 Zv = zvec[0].elements.Flt; 72 Rv = rvec[0].elements.Flt; 73 74 for (i = 0; i < hvec[0].Nelements; i++, Hv++, Dv++, Av++, Zv++, Rv++) { 75 HD_to_AZ (Av, Zv, Rv, *Hv, *Dv, lat); 76 } 77 return TRUE; 78 79 altaz: 80 if (ISNUM(argv[2][0]) && ISNUM(argv[3][0])) { 81 /* alt/az -> ha/dec */ 82 alt = atof (argv[2]); 83 az = atof (argv[3]); 84 85 AZ_to_HD (&ha, &dec, &rot, alt, az, lat); 86 87 set_variable (argv[5], ha); 88 set_variable (argv[6], dec); 89 set_variable ("ROT", rot); 90 return TRUE; 91 } 92 93 /* find vectors */ 94 if ((avec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return FALSE; 95 if ((zvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return FALSE; 96 if ((hvec = SelectVector (argv[5], ANYVECTOR, TRUE)) == NULL) return FALSE; 97 if ((dvec = SelectVector (argv[6], ANYVECTOR, TRUE)) == NULL) return FALSE; 98 if ((rvec = SelectVector ("ROT", ANYVECTOR, TRUE)) == NULL) return FALSE; 99 100 if (avec[0].Nelements != zvec[0].Nelements) { 101 gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[2], argv[3]); 102 return FALSE; 103 } 104 105 // cast xvec or yvec to FLT if it is type INT 106 CastVector (avec, OPIHI_FLT); 107 CastVector (zvec, OPIHI_FLT); 108 ResetVector (hvec, OPIHI_FLT, avec[0].Nelements); 109 ResetVector (dvec, OPIHI_FLT, avec[0].Nelements); 110 ResetVector (rvec, OPIHI_FLT, avec[0].Nelements); 111 112 Hv = hvec[0].elements.Flt; 113 Dv = dvec[0].elements.Flt; 114 Av = avec[0].elements.Flt; 115 Zv = zvec[0].elements.Flt; 116 Rv = rvec[0].elements.Flt; 117 118 for (i = 0; i < hvec[0].Nelements; i++, Hv++, Dv++, Av++, Zv++, Rv++) { 119 AZ_to_HD (Hv, Dv, Rv, *Av, *Zv, lat); 120 } 121 return TRUE; 122 123 usage: 124 gprint (GP_ERR, "USAGE: altaz -az (ha) (dec) to (alt) (az)\n"); 125 gprint (GP_ERR, "USAGE: altaz -hd (alt) (az) to (ha) (dec)\n"); 126 gprint (GP_ERR, " -hd alt/az to ha/dec, -az ha/dec to alt/az\n"); 127 gprint (GP_ERR, " returned values in variables or vectors provided\n"); 128 return FALSE; 129 } 130 131 int HD_to_AZ(double *alt, double *az, double *rot, double ha, double dec, double lat) { 132 133 double sind, sinh, cosh; 134 33 135 sind = dSIN (dec) * dSIN (lat) + dCOS (dec) * dCOS (ha) * dCOS (lat); 34 alt = DEG_RAD * asin (sind);136 *alt = DEG_RAD * asin (sind); 35 137 36 138 sinh = - dCOS (dec) * dSIN (ha); 37 139 cosh = dSIN (dec) * dCOS (lat) - dCOS (dec) * dCOS (ha) * dSIN (lat); 38 140 39 az = DEG_RAD * atan2 (sinh, cosh); 40 set_variable (argv[4], alt); 41 set_variable (argv[5], az); 141 *az = DEG_RAD * atan2 (sinh, cosh); 142 143 sinh = -dCOS(*az) * dSIN(*alt) * dSIN(ha) * dSIN(lat) + dSIN(*az) * dSIN(*alt) * dCOS(ha) - dSIN(ha) * dCOS(*alt) * dCOS(lat); 144 cosh = -dSIN(*az) * dSIN(ha) * dSIN(lat) - dCOS(*az) * dCOS(ha); 145 *rot = -DEG_RAD * atan2 (sinh, cosh); 146 147 return TRUE; 148 } 42 149 43 sinh = -dCOS(az) * dSIN(alt) * dSIN(ha) * dSIN(lat) + dSIN(az) * dSIN(alt) * dCOS(ha) - dSIN(ha) * dCOS(alt) * dCOS(lat); 44 cosh = -dSIN(az) * dSIN(ha) * dSIN(lat) - dCOS(az) * dCOS(ha); 45 rot = -DEG_RAD * atan2 (sinh, cosh); 46 set_variable ("ROT", rot); 150 int AZ_to_HD(double *ha, double *dec, double *rot, double alt, double az, double lat) { 47 151 48 return (TRUE); 49 50 altaz: 51 /* alt/az -> ha/dec */ 52 alt = atof (argv[4]); 53 az = atof (argv[5]); 54 55 latstr = get_variable ("LATITUDE"); 56 if (latstr == (char *) NULL) { 57 gprint (GP_ERR, "please define $LATITUDE\n"); 58 return (FALSE); 59 } 60 lat = atof (latstr); 61 free (latstr); 152 double sind, sinh, cosh; 62 153 63 154 sind = dSIN (alt) * dSIN (lat) + dCOS (alt) * dCOS (az) * dCOS (lat); 64 dec = DEG_RAD * asin (sind);155 *dec = DEG_RAD * asin (sind); 65 156 66 157 sinh = -dCOS (alt) * dSIN (az); 67 158 cosh = dSIN (alt) * dCOS (lat) - dCOS (alt) * dCOS (az) * dSIN (lat); 68 159 69 ha = DEG_RAD * atan2 (sinh, cosh); 70 set_variable (argv[2], ha); 71 set_variable (argv[3], dec); 160 *ha = DEG_RAD * atan2 (sinh, cosh); 72 161 73 sinh = -dCOS(az) * dSIN(alt) * dSIN(ha) * dSIN(lat) + dSIN(az) * dSIN(alt) * dCOS(ha) - dSIN(ha) * dCOS(alt) * dCOS(lat); 74 cosh = -dSIN(az) * dSIN(ha) * dSIN(lat) - dCOS(az) * dCOS(ha); 75 rot = -DEG_RAD * atan2 (sinh, cosh); 76 set_variable ("ROT", rot); 162 sinh = -dCOS(az) * dSIN(alt) * dSIN(*ha) * dSIN(lat) + dSIN(az) * dSIN(alt) * dCOS(*ha) - dSIN(*ha) * dCOS(alt) * dCOS(lat); 163 cosh = -dSIN(az) * dSIN(*ha) * dSIN(lat) - dCOS(az) * dCOS(*ha); 164 *rot = -DEG_RAD * atan2 (sinh, cosh); 77 165 78 return (TRUE); 79 80 usage: 81 gprint (GP_ERR, "USAGE: altaz -h (ha) (dec) (alt) (az)\n"); 82 gprint (GP_ERR, "USAGE: altaz -c (ha) (dec) (alt) (az)\n"); 83 gprint (GP_ERR, " -h alt/az to ha/dec, -c ha/dec to alt/az\n"); 84 gprint (GP_ERR, " returned values in variables provided\n"); 85 return (FALSE); 86 166 return TRUE; 87 167 } 88
Note:
See TracChangeset
for help on using the changeset viewer.
