개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.21 15:26

atan2 함수 이해에 도움을 요청합니다.

목록
  • Unity마법사 2일 전 2025.04.21 15:26
  • 21
    1
저는 C++에서 atan2 함수를 사용하여 두 점 사이의 각도 계산에 어려움을 겪고 있습니다. atan2 함수는 y/x를 계산하여 각도를 구하는 것처럼 보이지만, 특정 조건에서 결과가 NaN이 나오는 것을 발견했습니다. atan2 함수가 NaN을 반환하는 이유는 무엇이며, 이 문제를 해결하는 방법은 무엇입니까?

    댓글목록

    profile_image
    나우호스팅  2일 전



    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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 13,726건 / 28 페이지

검색

게시물 검색