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
|
* 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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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, °, &min, &sec);
|
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);
|
lon1 = dms2dec(deg, min, sec);
|
||||||
printf(" Recoded lon: %f\n", lon1);
|
printf(" Recoded lon: %f\n", lon1);
|
||||||
|
|
||||||
dec2dms(lat1, °, &min, &sec);
|
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);
|
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, °, &min, &sec);
|
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);
|
lon2 = dms2dec(deg, min, sec);
|
||||||
printf(" Recoded lon: %f\n", lon2);
|
printf(" Recoded lon: %f\n", lon2);
|
||||||
|
|
||||||
dec2dms(lat2, °, &min, &sec);
|
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);
|
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, °, &min, &sec);
|
dec2dms(az, °, &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);
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue