C언어나 C++에서 사용할 수 있는 함수입니다. 두 지점의 위경도 값을 정해서 함수에 대입하면 Meter로 값을 반환합니다. km로 값을 받고 싶으면 dDistance*=1000; 부분 주석치면 됩니다.
double GetDistance( tagPT pt1, tagPT pt2 ) { int radius = 6371; double dLat = rad( (pt2.y-pt1.y) ); double dLon = rad( (pt2.x-pt1.x) ); pt1.y = rad( pt1.y ); pt2.y = rad( pt2.y ); double a = sin(dLat⁄2) * sin(dLat⁄2) + sin(dLon⁄2) * sin(dLon⁄2) * cos(pt1.y) * cos(pt2.y); double c = 2 * atan2f(sqrtf(a), sqrtf(1-a)); double dDistance = radius * c; dDistance*=1000; return dDistance; }
아래는 예제 입니다.
#include <stdio.h> #include <math.h> #define rad(x) x*3.14159⁄180.0 struct tagPT { double x; double y; double z; }; double GetDistance( tagPT pt1, tagPT pt2 ); int main() { tagPT pt1; tagPT pt2; //한밭수목원 거리 pt1.y = 36.364808; pt1.x = 127.379525; pt2.y = 36.364772; pt2.x = 127.390275; double dDis = GetDistance( pt1, pt2 ); return 0; } double GetDistance( tagPT pt1, tagPT pt2 ) { int radius = 6371; double dLat = rad( (pt2.y-pt1.y) ); double dLon = rad( (pt2.x-pt1.x) ); pt1.y = rad( pt1.y ); pt2.y = rad( pt2.y ); double a = sin(dLat⁄2) * sin(dLat⁄2) + sin(dLon⁄2) * sin(dLon⁄2) * cos(pt1.y) * cos(pt2.y); double c = 2 * atan2f(sqrtf(a), sqrtf(1-a)); double dDistance = radius * c; dDistance*=1000; return dDistance; }
'예제 모음 > C/C++' 카테고리의 다른 글
[C언어] 재귀 함수 - 10진수 -> 2진수 변환 (1) | 2014.03.20 |
---|---|
[C언어] 소수점 특정 자릿수 반올림하기 - ROUND 함수 (0) | 2014.03.14 |
[C언어] 어떤 수 x가 2의 n승인지 판별하는 함수 (0) | 2014.03.13 |
[C언어] 재귀 함수 - 이진 탐색 (Binary Search) (0) | 2013.12.05 |
[C언어] 재귀 함수 - 거듭제곱 (power) (3) | 2013.12.05 |
[C언어] 재귀 함수 - 팩토리얼 (Factorial) (3) | 2013.12.05 |
[C언어] 재귀 함수 - 함수의 재귀적 호출 (3) | 2013.12.04 |