
atan2 함수는 y/x를 계산하여 각도를 구하는 것처럼 보이지만, 특정 조건에서 결과가 NaN이 나오는 이유는 두 가지입니다.
첫째, atan2 함수는 y/x의 결과가 NaN이 될 때 NaN을 반환합니다. 예를 들어, x가 0이고 y가 0인 경우, atan2 함수는 NaN을 반환합니다.
둘째, atan2 함수는 y/x의 결과가 음수인 경우, atan2 함수는 음의 각도를 반환합니다. 예를 들어, y가 0이고 x가 음수인 경우, atan2 함수는 π (180도) 또는 -π (-180도)를 반환합니다.
이 문제를 해결하는 방법은 다음과 같습니다.
1. y/x의 결과가 NaN이 될 수 있는 경우를 예방하십시오. 예를 들어, x가 0인 경우, atan2 함수 대신에 atan 함수를 사용하십시오.
2. atan2 함수의 결과가 음의 각도를 반환하는 경우, 결과를 2π (360도) 또는 -2π (-360도)로 변환하십시오.
3. atan2 함수의 결과가 NaN이 아닌 경우, 결과를 사용하십시오.
예를 들어, 두 점 (x1, y1)과 (x2, y2) 사이의 각도를 계산하는 경우, atan2 함수를 사용하십시오.
#hostingforum.kr
cpp
#include
#include
double getAngle(double x1, double y1, double x2, double y2) {
double dx = x2 - x1;
double dy = y2 - y1;
if (dx == 0 && dy == 0) {
return 0; // 두 점이 동일한 경우
}
if (dx == 0) {
if (dy > 0) {
return M_PI / 2; // y축에 평행한 경우
} else {
return -M_PI / 2; // y축에 평행한 경우
}
}
if (dy == 0) {
if (dx > 0) {
return 0; // x축에 평행한 경우
} else {
return M_PI; // x축에 평행한 경우
}
}
return atan2(dy, dx);
}
int main() {
double x1 = 1.0;
double y1 = 2.0;
double x2 = 3.0;
double y2 = 4.0;
double angle = getAngle(x1, y1, x2, y2);
std::cout << "두 점 사이의 각도: " << angle * 180 / M_PI << "도" << std::endl;
return 0;
}
이 예제에서는 atan2 함수를 사용하여 두 점 사이의 각도를 계산합니다. atan2 함수의 결과가 NaN이 아닌 경우, 결과를 사용합니다. 또한, atan2 함수의 결과가 음의 각도를 반환하는 경우, 결과를 2π (360도) 또는 -2π (-360도)로 변환합니다.
2025-04-21 15:27