삼각함수에 아크(arc)는 삼각함수의 역함수를 나타내는 것이다.
삼각함수는 각도 -> 변의 비율 을 알수 있다면
역삼각함수는 변의 비율 -> 각도 를 알수 있다.
그럼 역삼각함수중 왜 아크탄젠트를 알아야 되는것인가??
우선 탄젠트에 대해 알아보자
탄젠트는 높이(y) 밑변(x)라는 직관적인 값 덕분에 사용하고 싶었지만 음수값이 나오지않기에 사용을 못했지만
개발자들이 사용하기 위해 x,y자체가 양수인지 음수인지를 통해 360도를 다 구분할 수 있게 구현한 것이다.
Atan2(y,x) 라는 메서드로 구현한 것이다.
이를 통해 (x,y)에서 Math.Atan2(y,x) 함수를 사용하여 벡터가 x축과 이루는 각도를 [ -pi , pi ] 까지의 값을 얻을수있다.
(p.s pi는 180도가 되도록 표현하는 것을 호도법 , 그리고 그 단위를 라디안이라고 부름 , 즉 라디안에서 pi = 180 이라고 생각하면됨)
그럼 Atan2(y,x) 메서드를 어디에 사용해야되느냐?
2D에서 점 또는 벡터에 대한 각도를 찾는데 사용된다.
즉, 객체가 특정 방향을 향하도록 만들거나 두 점 사이의 각도를 계산할때 유용해진다.
예시) 몬스터가 90도 범위의 시야각을 가지고 있을때, 캐릭터가 범위 안에 있는지 없는지 판정을 어떡해 구현해야되는가?
우선 몬스터-캐릭터의 거리를 구해야하기에 벡터의 뺼셈을 이용해야 된다.
(벡터의 뺼셈을 이용하여 두 벡터간의 거리를 구할 수 있다. [목표 지점의 벡터 - 이동 및 바라보는 객체의 벡터] )
구해진 벡터(x,y)를 Atan2(y,x) 메서드에 인자값으로 넣을경우 각도가 반환되는데 -45 ~ 45도 사이에 있으면 몬스터 시야에 캐릭터가 있다고 판단하면된다.
(중요 :: Atan2(y,x)로 반환된 각도의 단위는 라디안이기에 degree로 바꿔줘야한다)
예시2) 2D 게임에서 마우스 위치를 기준으로 좌우반전 구현
두 벡터의 거리를 알기위해 [ 마우스의 위치 - 캐릭터의 위치 ] 벡터 뺼셈을 이용하여 거리(방향벡터)를 구하고
해당 벡터를 Mathf.Atan2(y,x) * Mathf.Rad2Deg 를 이용하여 각도값을 반환한다.
반환된 각도값은 두 객체간의 각도를 나타낸다.
이 그림을 보면 1사분면,4사분면에 있을때는 절대값이 90도를 안넘기에 스프라이트를 반전하지 않아도 되고
2사분면,3사분면에 있을때는 절대값이 90도를 넘기에 스프라이트를 반전하게 된다.
결론 :
1. Atan2는 각도를 알기 위해 y와 x의 비율을 통해 각을 알아내는 함수이고 [-180 , 180] 범위에서 각도 반환값을 제공한다.
2. Atan2를 사용한뒤 객체에 회전값을 입력할떄 Rad2Deg를 사용해야한다.
(유니티 내부는 쿼터니언 inspector는 오일러이기 때문에)
'게임수학' 카테고리의 다른 글
게임수학 :: 삼각함수 기초 (작성중) (0) | 2024.10.08 |
---|