Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Moon_B 게임개발 공부 업적

[Unity] 회전 쿼터니언(Quaternion) 삼각함수 Atan2 본문

Unity

[Unity] 회전 쿼터니언(Quaternion) 삼각함수 Atan2

Moon_B 2025. 2. 17. 13:26

게임 개발자라면 필수로 알아하는 회전과 각도에 대해 공부해 보았습니다.

쿼터니언(Quaternion)이란

유니티 인스팩터 창에서 나오는 회전은 Vector3로 표현되고, 이런 방식을 오일러각(EulerAngle)이라고 합니다. 하지만 대부분 3D 소프트웨어는 내부적으로 쿼터니언을 사용합니다. ex) 유니티, 블랜더, 3DMax 같은거..

  • 오일러 공식으로 여러회전을 하면서 회전의 각도가 겹쳐서 한 축으로의 회전을 읽어버리는 짐벌 락(Gimbal Lock) 현상이 발생할 수 있습니다. 짐벌락 설명 유튜브 링크 : (https://youtu.be/yxMQKsab5TQ?feature=shared)

  • 그래서 쿼터니언을 사용하면 짐벌 락(Gimbal Lock)문제를 피할 수 있습니다. 수학적으로 4차원 복소수를 이용한 회전 표현 방법입니다. (x,y,z,w) 형태로 표현합니다. 주의 유니티같은 개발을 할때 절대 값을 숫자로 직접 조정하지는 마세요 문제가 생길 수도 있습니다.

  • Unity의 내장함수를 이용하는 것이 좋습니다. (Quaternion.Euler, Quaternion.LookRotation, Quaternion.Slerp 등)

    • Quaternion.Euler : 오일러각을 쿼터니언으로 변경할 수 있습니다. (Quaternion.Euler(0f, 0f, 90f) → Quaternion으로 변환)
    • Quaternion.LookRotation : 머리를 회전하는 것처럼, 앞과 위를 특정한 방향으로 하는 회전 쿼터니언을 만들 수 있습니다.
    • Quaternion.Slerp : 쿼터니언과 다른 쿼터니언 사이에 내분점을 알 수 있습니다. 구형 보간(Spherical Linear Interpolation)기법을 활용해서 쿼터니언에 쓰면 더 정확해져요. (두 쿼터니언 Q1, Q2가 있을 때 중간 지점 (30%, 40%..)은 어디일까? 이런 문제를 풀 때 유용합니다)

삼각함수와 아크탄젠트

1. 삼각함수

간단하게 삼각함수는 각도를 이용해 변의 길이의 비율을 구하는 함수(도구) 입니다.

  • 삼각함수에는 기본적으로 세 가지가 있습니다.

삼각함수는 각도➡️비율을 구하는 함수이며, 탄젠트는 밑변과 높이의 비율을 나타냅니다.

2. 아크탄텐트

삼각함수에서 아크(arc)가 붙으면 역삼각함수를 의미합니다. 즉, 비율➡️각도를 구할 수 있습니다.
아크탄젠트 함수(atan 또는 atan2)는 가로(x)와 세로(y)의 비율을 사용하여 각도를 계산하는 데 활용됩니다.

Atan과 Atan2 차이점

  • atan(y/x): 기본적인 아크탄젠트 연산이지만, 180도 범위 내에서만 각도를 반환합니다.
  • atan2(y, x): x, y의 부호를 고려하여 전체 360도 범위의 각도를 계산할 수 있습니다.

즉, Atan2는 각도를 구할 때 y와 x의 비율을 이용하는 함수이며, $[-pi , pi]$ (라디안 기준) 범위에서 결과를 반환합니다.

Atan2 사용 예시

  • Atan2로 라디안 값 구하고 디그리(도) 값으로 변환해 주어 각도를 구합니다.