C 프로그래밍 : 두 GPS 좌표간 목적지 방위각(bearing) 계산하기
- 프로그래밍/C 프로그래밍
- 2020. 4. 29.
반응형
C 프로그래밍 : 두 GPS 좌표간 목적지 방위각(bearing) 계산하기
본 글에서는 C 언어를 이용하여 하나의 GPS 좌표에서 다른 GPS 좌표로의 목적지 방위각(bearing)을 계산하는 방법에 대해 설명한다.
GPS 좌표 중 도 단위 위도(latitude) 값과 경도(longitude) 값을 이용하여 특정 좌표로부터 또 다른 좌표로의 목적지 방위각(bearing)을 계산할 수 있다.
목적지 방위각(bearing)은 "특정 객체의 진행방향과 또다른 객체 사이의 각도" 또는 "정북(True North)와 타겟좌표 사이의 각도"를 의미하며, 본 글에서의 의미는 후자이다.
본 방법에서는 계산을 위해 삼각함수가 사용되므로 math 헤더파일을 인클루드해야 한다.
목적지 방위각(bearing)을 구한는 함수는 다음과 같이 구현할 수 있다.
// 시스템 헤더 파일
#include <math.h>
/// 계산에 사용되는 파이 값
#define PI 3.14159265358979323846
/**
* @brief 소수점 도(decimal degree)를 라디언(radian)으로 변환한다.
* @param[in] deg 변환할 도 값
* @return 변환된 라디언 값
*/
double ConvertDecimalDegreesToRadians(double deg)
{
return (deg * PI / 180);
}
/**
* @brief 라디언(radian)을 소수점 도(decimal degree)로 변환한다.
* @param[in] rad 변환할 라디언 값
* @return 변환된 도 값
*/
double ConvertRadiansToDecimalDegrees(double rad)
{
return (rad * 180 / PI);
}
/**
* @brief 두 좌표간의 도 단위 bearing 을 계산한다.
*
* @param[in] lat1 좌표1의 위도(도단위)
* @param[in] lon1 좌표1의 경도(도단위)
* @param[in] lat2 좌표2의 위도(도단위)
* @param[in] lon2 좌표2의 경도(도단위)
* @return 두 좌표간 bearing (도 단위)
*/
double GetBearingBetweenPoints(double lat1, double lon1, double lat2, double lon2)
{
double lat1_rad = ConvertDecimalDegreesToRadians(lat1);
double lat2_rad = ConvertDecimalDegreesToRadians(lat2);
double lon_diff_rad = ConvertDecimalDegreesToRadians(lon2-lon1);
double y = sin(lon_diff_rad) * cos(lat2_rad);
double x = cos(lat1_rad) * sin(lat2_rad) - sin(lat1_rad) * cos(lat2_rad) * cos(lon_diff_rad);
return ((int)ConvertRadiansToDecimalDegrees(atan2(y, x)) + 360) % 360;
}
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'프로그래밍 > C 프로그래밍' 카테고리의 다른 글
빌드 에러 - undefined reference to mp_prime_is_prime (0) | 2021.03.25 |
---|---|
실행 에러 - free(): invalid size (0) | 2021.03.24 |
빌드 에러 - undefined reference to log10f (0) | 2021.03.22 |
Object Identifier asn.1 인코딩 방법 (0) | 2021.02.11 |
C 프로그래밍 : 두 GPS 좌표간 거리(distance) 구하기 (3) | 2020.04.29 |
C 프로그래밍 : 네트워크 인터페이스 MAC 주소 문자열을 바이트열로 변환 (2) | 2020.02.13 |
C 프로그래밍 : MAC 주소 출력 매크로 - MAC 주소 출력문을 간단하게. (0) | 2020.02.12 |
C 프로그래밍 : 배열 데이터를 16진수 형식으로 출력하기(Hex dump) (0) | 2020.02.09 |