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 * Hamlib Interface - Rotator API header
* Copyright (c) 2000-2003 by Stephane Fillod * 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 * This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as * 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, extern HAMLIB_EXPORT(int) locator2longlat HAMLIB_PARAMS((double *longitude,
double *latitude, const char *locator)); 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)); double seconds));
extern HAMLIB_EXPORT(void) dec2dms HAMLIB_PARAMS((double dec, int *degrees, extern HAMLIB_EXPORT(void) dec2dms HAMLIB_PARAMS((double dec, float *degrees,
int *minutes, double *seconds)); double *minutes, double *seconds));
/*! \def rot_debug /*! \def rot_debug

Wyświetl plik

@ -14,7 +14,7 @@
* Copyright (c) 2003 by Nate Bargmann * Copyright (c) 2003 by Nate Bargmann
* Copyright (c) 2003 by Dave Hines * 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, * Code to determine bearing and range was taken from the Great Circle,
* by S. R. Sampson, N5OWK. * by S. R. Sampson, N5OWK.
@ -116,11 +116,14 @@ const static int loc_char_range[] = { 18, 10, 24, 10, 25, 10 };
* *
* \sa dec2dms() * \sa dec2dms()
*/ */
double dms2dec(int degrees, int minutes, double seconds) {
if (degrees >= 0) double dms2dec(float degrees, double minutes, double seconds) {
return (double)degrees + (double)minutes/60. + seconds/3600.; double s, st;
else
return (double)degrees - (double)minutes/60. - seconds/3600.; 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 * When passed a value < -180 or > 180, the sign will be reversed
* and the value constrained to => -180 and <= 180 before conversion. * and the value constrained to => -180 and <= 180 before conversion.
* *
* Upon return dec2dms guarantees -180<=degrees<180, * Upon return dec2dms guarantees -180 <= degrees < 180,
* 0<=minutes<60, and 0<=seconds<60. * 0 <= minutes < 60, and 0 <= seconds < 60.
* *
* \sa dms2dec() * \sa dms2dec()
*/ */
void dec2dms(double dec, int *degrees, int *minutes, double *seconds) {
int deg, min, is_neg = 0; void dec2dms(double dec, float *degrees, double *minutes, double *seconds) {
double st; int is_neg = 0;
float deg;
double st, min;
if (!degrees || !minutes || !seconds) if (!degrees || !minutes || !seconds)
return; return;
@ -175,13 +180,13 @@ void dec2dms(double dec, int *degrees, int *minutes, double *seconds) {
*/ */
st = fabs(st); st = fabs(st);
deg = (int)floor(st); deg = (float)floor(st);
st = 60. * (st-(double)deg); st = 60. * (st - (double)deg);
min = (int)floor(st); min = floor(st);
st = 60. * (st-(double)min); st = 60. * (st - min);
/* set *degrees to original sign passed to dec */ /* 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; *minutes = min;
*seconds = st; *seconds = st;

Wyświetl plik

@ -15,8 +15,8 @@
int main (int argc, char *argv[]) { int main (int argc, char *argv[]) {
char recodedloc[13], *loc1, *loc2; char recodedloc[13], *loc1, *loc2;
double lon1 = 0, lat1, lon2, lat2; double lon1 = 0, lat1, lon2, lat2;
double distance, az, sec; double distance, az, min, sec;
int deg, min; float deg;
int retcode, locator_length; int retcode, locator_length;
if (argc < 3) { if (argc < 3) {
@ -36,12 +36,12 @@ int main (int argc, char *argv[]) {
} }
dec2dms(lon1, &deg, &min, &sec); 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); lon1 = dms2dec(deg, min, sec);
printf(" Recoded lon: %f\n", lon1); printf(" Recoded lon: %f\n", lon1);
dec2dms(lat1, &deg, &min, &sec); 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); lat1 = dms2dec(deg, min, sec);
printf(" Recoded lat: %f\n", lat1); printf(" Recoded lat: %f\n", lat1);
@ -63,12 +63,12 @@ int main (int argc, char *argv[]) {
} }
dec2dms(lon2, &deg, &min, &sec); 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); lon2 = dms2dec(deg, min, sec);
printf(" Recoded lon: %f\n", lon2); printf(" Recoded lon: %f\n", lon2);
dec2dms(lat2, &deg, &min, &sec); 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); lat2 = dms2dec(deg, min, sec);
printf(" Recoded lat: %f\n", lat2); printf(" Recoded lat: %f\n", lat2);
@ -86,7 +86,7 @@ int main (int argc, char *argv[]) {
} }
dec2dms(az, &deg, &min, &sec); dec2dms(az, &deg, &min, &sec);
printf("\nDistance: %.2fkm\n", distance); 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); exit(0);
} }