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-79ac388436b8
Hamlib-1.2.0
Nate Bargmann, N0NB 2003-09-11 01:04:14 +00:00
rodzic dadc34efef
commit 5989eebc0d
3 zmienionych plików z 32 dodań i 27 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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);
}
/**
@ -135,14 +138,16 @@ double dms2dec(int degrees, int minutes, double seconds) {
* When passed a value < -180 or > 180, the sign will be reversed
* and the value constrained to => -180 and <= 180 before conversion.
*
* Upon return dec2dms guarantees -180<=degrees<180,
* 0<=minutes<60, and 0<=seconds<60.
* Upon return dec2dms guarantees -180 <= degrees < 180,
* 0 <= minutes < 60, and 0 <= seconds < 60.
*
* \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);
st = 60. * (st-(double)deg);
min = (int)floor(st);
st = 60. * (st-(double)min);
deg = (float)floor(st);
st = 60. * (st - (double)deg);
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;

Wyświetl plik

@ -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, &deg, &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, &deg, &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, &deg, &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, &deg, &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, &deg, &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);
}