본문 바로가기
제출용/TIL

내일배움캠프 25일차 TIL + 쿼터니언, 삼각함수

by 유린테 2024. 5. 21.

내가 다니는 대학은 수능에서 수학 성적을 보지 않는다..

심지어 나는 문과다...

게임개발 하면서 삼각함수를 다시 보게 될 줄은 상상도 못했다

 


 

 

쿼터니언 (Quaternion)

 

유니티 인스펙터 창에서 나오는 회전은 Vector3로 표현되고, 이런 방법을 오일러각 (Euler Angle)이라 함

하지만, 시중의 많은 3D 소프트웨어는 내부적으로 쿼터니언을 사용

쿼터니언을 사용할 시 짐벌 락 (Gimbal Lock) 문제를 피할 수 있음

극단적인 각도로 회전할 경우 한 축으로의 회전을 잃어버리는 것을 짐벌락이라고 한다

수학적으로는 4차원 복소수를 이용한 회전 표현 방법.  (x,y,z,w) 형태로 표현

그렇다고 직접 x,y,z,w 값을 조정할 생각은 하지 마세요

직접 값을 변경하거나 계산하는 대신, Unity 의 내장함수를 사용하는 것이 좋다.

(ex. Quaternion, Euler, Quaternion,LookRotation, Quaternion.Slerp 등)

쿼터니언은 애초에 직관적인 수체계를 사용하지 않음

직접 값을 적용하려면 Quaternion.Identity (회전이 없는 상태를 나타내는 쿼터니언)만 사용해야함

 

쿼터니언 - 4가지 숫자를 가지고 있다는 뜻

Quaternion.Euler - 오일러 각을 쿼터니언으로 바꿔주는것 / Quaternion.Euler(0f,0f,90f) > Quaternion

                               괄호 안에 degree/radian 이 쓰임.

Quaternion.LookRotation - 앞이랑 위를 알려주고 회전을 어떻게 할지 알려주는것

                                           머리를 회전하듯이, 앞과 위를 특정한 방향으로 하는 회전 쿼터니언을 만듬

Quaternion.Slerp - 쿼터니언의 회전의 중간값을 알 수 있다

                              쿼터니언과 다른 쿼터니언 사이의 내분점을 알 수 있다

                              구형보간(Spherical Linear Interpolation) 기법을 활용해서 쿼터니언에 쓰면 더 정확해짐

                              두 쿼터니언 Q1,Q2가 있을 때 30%지점은 어디일까? 같은 문제 풀 때 유용함

 

 

삼각함수 기초와 아크탄젠트 (ArcTangent)

 

삼각함수 기초

삼각함수 - 각도를 통해 삼각형들의 각 변의 비율을 알아낼 수 있는 함수

 

위 그림에서  번데기 각도가 30도 할 때, 빗변(a)와 높이(b)의 비율은 어떻게 차이날까?

삼각함수를 알면 삼각형을 그려보지 않더라도 sin(30')=1/2  이므로 빗변이 높이에 비해 2배 길다는것을 알 수 있다

 

사인 코사인 탄젠트

 

sin = 높이/빗변

cos = 밑변/빗변

tan = 높이/밑편

그림보면서 연상하듯이 외우면 그리 어렵지 않아

 

아크탄젠트

삼각함수에서 아크가 붙으면 삼각함수의 역함수인 역삼각함수를 말함

각도>비율 이었던게 비율>각도가 됨

즉 아크탄젠트는 탄젠트의 역함수입니다. 가로와 세로의 비에 따른 각도를 계산할 때 사용됩니다

 

2D에서 점 또는 벡터에 대한 각도 찾는데 아크탄젠트 함수 종종 사용

여기에 개발자 편하게 쓰려고 한 가지를 더 추가한다

비율 말고도 x,y 자체가 양수인지 음수인지를 통해 360도를 다 구분해낼 수 있게 함 

(원래는 x,y와 같은 부호지만 둘다 양수, 둘다음수거나 x,y 가 다른 부호지만 x가 음수거나 y가 음수인 상황 때문에 아크탄젠트로는 180도 범위에서만 알아낼 수 있었음)

이런 구현을 개발자들은 Atan2 라고 이름붙이고, 밑변/높이 였던 탄젠트의 기본 개념을 적용해 y,x순으로 인수를 넣음

 

이를 통해 점 (x,y)에서 Math.Atan2(y,x) 함수를 사용해 벡터가 x축과 이루는 각도를 (-파이,파이) 의 갑승로 얻을 수 있음

(파이로 표현된 각도를 180도가 되도록 표현하는 방법을 호도법, 그 단위를 라디안이라 부름)

Atan2를 활용해 객체가 특정 방향을 향하도록 만들거나 두 점 사이의 각도를 계산할 때 유용하다.

 

180도를 파이라고 부른다

Mathf.RadiantoDegree ..???

Mathf.Rad2Deg

 

Quiz  몬스터가 90도 범위의 시야각을 가지고 있을 때, 어떻게 이런 기능을 구현할 수 있을까?

> 캐릭터와 몬스터 사이의 거리에 Atan2를 통해 각도를 재서 -45~45 사이에 있는지 확인하면 됩니다!

 

Atan2는 각도를 알기 위해 y와 x의 비율을 통해 각을 알아내는 함수이고, [-\pi,\pi] 범위에서 결과가 나온다

 

 


 

수능때도 안한 수학공부를 유니티 부트캠프에서 보게 되었다

물론 삼각함수 정도는 알고 있지만!!!!!! ..... 자세하게는 몰라서 한번 보기는 해야할듯 하핫