kopia lustrzana https://github.com/Hamlib/Hamlib
2003-09-10
Updated: locator.c -- fixed "zero bug" in dec2dms() and dms2dec() rotator.h -- changed dec2dms() and dms2dec() parameter, degrees to float and minutes to double testloc.c -- modified to support changed parameters git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1534 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.0
rodzic
dadc34efef
commit
5989eebc0d
|
@ -2,7 +2,7 @@
|
|||
* Hamlib Interface - Rotator API header
|
||||
* Copyright (c) 2000-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: rotator.h,v 1.8 2003-08-21 20:22:06 n0nb Exp $
|
||||
* $Id: rotator.h,v 1.9 2003-09-11 01:04:14 n0nb Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -339,10 +339,10 @@ extern HAMLIB_EXPORT(int) longlat2locator HAMLIB_PARAMS((double longitude,
|
|||
extern HAMLIB_EXPORT(int) locator2longlat HAMLIB_PARAMS((double *longitude,
|
||||
double *latitude, const char *locator));
|
||||
|
||||
extern HAMLIB_EXPORT(double) dms2dec HAMLIB_PARAMS((int degs, int minutes,
|
||||
extern HAMLIB_EXPORT(double) dms2dec HAMLIB_PARAMS((float degrees, double minutes,
|
||||
double seconds));
|
||||
extern HAMLIB_EXPORT(void) dec2dms HAMLIB_PARAMS((double dec, int *degrees,
|
||||
int *minutes, double *seconds));
|
||||
extern HAMLIB_EXPORT(void) dec2dms HAMLIB_PARAMS((double dec, float *degrees,
|
||||
double *minutes, double *seconds));
|
||||
|
||||
|
||||
/*! \def rot_debug
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* Copyright (c) 2003 by Nate Bargmann
|
||||
* Copyright (c) 2003 by Dave Hines
|
||||
*
|
||||
* $Id: locator.c,v 1.9 2003-08-21 20:22:06 n0nb Exp $
|
||||
* $Id: locator.c,v 1.10 2003-09-11 01:04:14 n0nb Exp $
|
||||
*
|
||||
* Code to determine bearing and range was taken from the Great Circle,
|
||||
* by S. R. Sampson, N5OWK.
|
||||
|
@ -116,11 +116,14 @@ const static int loc_char_range[] = { 18, 10, 24, 10, 25, 10 };
|
|||
*
|
||||
* \sa dec2dms()
|
||||
*/
|
||||
double dms2dec(int degrees, int minutes, double seconds) {
|
||||
if (degrees >= 0)
|
||||
return (double)degrees + (double)minutes/60. + seconds/3600.;
|
||||
else
|
||||
return (double)degrees - (double)minutes/60. - seconds/3600.;
|
||||
|
||||
double dms2dec(float degrees, double minutes, double seconds) {
|
||||
double s, st;
|
||||
|
||||
s = copysign(1.0, (double)degrees);
|
||||
st = fabs((double)degrees);
|
||||
|
||||
return copysign((st + minutes / 60. + seconds / 3600.), s);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -140,9 +143,11 @@ double dms2dec(int degrees, int minutes, double seconds) {
|
|||
*
|
||||
* \sa dms2dec()
|
||||
*/
|
||||
void dec2dms(double dec, int *degrees, int *minutes, double *seconds) {
|
||||
int deg, min, is_neg = 0;
|
||||
double st;
|
||||
|
||||
void dec2dms(double dec, float *degrees, double *minutes, double *seconds) {
|
||||
int is_neg = 0;
|
||||
float deg;
|
||||
double st, min;
|
||||
|
||||
if (!degrees || !minutes || !seconds)
|
||||
return;
|
||||
|
@ -175,13 +180,13 @@ void dec2dms(double dec, int *degrees, int *minutes, double *seconds) {
|
|||
*/
|
||||
st = fabs(st);
|
||||
|
||||
deg = (int)floor(st);
|
||||
deg = (float)floor(st);
|
||||
st = 60. * (st - (double)deg);
|
||||
min = (int)floor(st);
|
||||
st = 60. * (st-(double)min);
|
||||
min = floor(st);
|
||||
st = 60. * (st - min);
|
||||
|
||||
/* set *degrees to original sign passed to dec */
|
||||
(is_neg == 1) ? (*degrees = deg * -1) : (*degrees = deg);
|
||||
(is_neg == 1) ? (*degrees = -deg) : (*degrees = deg);
|
||||
|
||||
*minutes = min;
|
||||
*seconds = st;
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
int main (int argc, char *argv[]) {
|
||||
char recodedloc[13], *loc1, *loc2;
|
||||
double lon1 = 0, lat1, lon2, lat2;
|
||||
double distance, az, sec;
|
||||
int deg, min;
|
||||
double distance, az, min, sec;
|
||||
float deg;
|
||||
int retcode, locator_length;
|
||||
|
||||
if (argc < 3) {
|
||||
|
@ -36,12 +36,12 @@ int main (int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
dec2dms(lon1, °, &min, &sec);
|
||||
printf(" Longitude: %f, %d° %d' %.2f\"\n", lon1, deg, min, sec);
|
||||
printf(" Longitude: %f, %.0f° %.0f' %.2f\"\n", lon1, deg, min, sec);
|
||||
lon1 = dms2dec(deg, min, sec);
|
||||
printf(" Recoded lon: %f\n", lon1);
|
||||
|
||||
dec2dms(lat1, °, &min, &sec);
|
||||
printf(" Latitude: %f, %d° %d' %.2f\"\n", lat1, deg, min, sec);
|
||||
printf(" Latitude: %f, %.0f° %.0f' %.2f\"\n", lat1, deg, min, sec);
|
||||
lat1 = dms2dec(deg, min, sec);
|
||||
printf(" Recoded lat: %f\n", lat1);
|
||||
|
||||
|
@ -63,12 +63,12 @@ int main (int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
dec2dms(lon2, °, &min, &sec);
|
||||
printf(" Longitude: %f, %d° %d' %.2f\"\n", lon2, deg, min, sec);
|
||||
printf(" Longitude: %f, %.0f° %.0f' %.2f\"\n", lon2, deg, min, sec);
|
||||
lon2 = dms2dec(deg, min, sec);
|
||||
printf(" Recoded lon: %f\n", lon2);
|
||||
|
||||
dec2dms(lat2, °, &min, &sec);
|
||||
printf(" Latitude: %f, %d° %d' %.2f\"\n", lat2, deg, min, sec);
|
||||
printf(" Latitude: %f, %.0f° %.0f' %.2f\"\n", lat2, deg, min, sec);
|
||||
lat2 = dms2dec(deg, min, sec);
|
||||
printf(" Recoded lat: %f\n", lat2);
|
||||
|
||||
|
@ -86,7 +86,7 @@ int main (int argc, char *argv[]) {
|
|||
}
|
||||
dec2dms(az, °, &min, &sec);
|
||||
printf("\nDistance: %.2fkm\n", distance);
|
||||
printf("Bearing: %f, %d° %d' %.2f\"\n", az, deg, min, sec);
|
||||
printf("Bearing: %f, %.0f° %.0f' %.2f\"\n", az, deg, min, sec);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue