ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티) 역탄젠트 Mathf.Atan2를 이용한 회전
    Unity유니티/회전 2022. 6. 14. 14:34

    저번에 CrossProduct외적과
    Dot 내적으로 회전을 만들어보았다
    이번엔 Mathf.Atan2를 이용한 회전도 만들어볼 생각이다

    Mathf.Atan2 역탄젠트함수인데 , 위에 작성하듯 상당히 짧은 구문이다
    당연히 역함수의 결과값이 라디안이기에 각도법으로 변환까지 해주었다

    Mathf.Atan은  Mathf.Atan과 Mathf.Atan2 두가지가 있는데

    Mathf.Atan은 인자를 한가지만 받고

    Mathf.Atan2는 두가지를 받는다 무슨차이일까

    역탄젠트 공식은 y/x이다  x는 밑변, y는 높이라 가정시

    Atan에는 높이/밑변의 비율을 인자로 전달하고 끝이지만

    Atan2에는 높이 밑변을 각각 전달할뿐만 아니라 부호또한 표시가 가능해진다

    만약 가운데가 회전할 캐릭터고
    12시 방향이 전방벡터Forward이며
    내가 바라볼 물체가 1시방향이라면

    Mathf.Atan2를 쓰려면

    왼쪽 그림처럼 해석할수가 있다
    바라볼방향 Dir은 
    물체위치 - 내위치로 쉽게 알수있다

    여기서 가상의 직각삼각형을 그려보면

    dir 벡터의 x축이 삼각혀으이 밑변

    y값이 높이역할이 되어준다

    Mahtf.Atan2(y, x)가 된다

    인자 순서는 y x순으로 F12로 함수클릭해 보면 알수있다

     

     총체적으로 구성해보면

    이렇게 해석이 나는 되었다

    왼쪽 그림처럼 X Y부호가 각 4분면마다 다른걸 알수있다

    그래서 인자를 2개 사용하는 Atan2를 사용해보기로했다

    추가로float degree = Mathf.Atan2(dir.z, dir.x) * Mathf.Rad2Deg ; 
            Debug.Log(" degree : " + degree); 로 디버그 값을

    자세히 관찰해보면

    1,2사분면에선 degree값이 양수

    3,4사분면에선 음수로 나오는걸 확인할수있다

    좀더 정확히 하면

    바라볼 물체(큐브)를 1사분면 에서 2사분면으로 옮겨갈수록 양수의 Degree값이 점점 커져가며 (0~180의 한계)

    반대 4분면에서 3사분면으로 갈수록 (0 ~ -180으로 간다)

     

     

    1. 물체가 내 앞 + 오른쪽 방향일시

    degree값이 90을 넘지않고 양수로 나왔을떄의 모습이다

    그러나 앞면뒷면 상관없이

    물체가 왼쪽 방향에 있을떄는

    degree값이 90도를 넘는다(뒷편일시 -90이상)

    이걸로 간단한 수정으로 표현할수 있게된거같다

     

     

    주석친거랑 안친거 다 같은 내용이다, 삼항연산자로 줄이는게 더 나을거같아서 바꾸었다
    위 코드 실행 내용

    뒷편에 있을떄 기준이다

    끝으로 회전해야한다면 회전 시키기

    저번엔 쿼터니언 러프를 썼는데 이번엔 오일러앵글로 해보았다
    저번과같이 돌아가는건 똑같다

    우선 최종이 이 모양이꼴이긴한데 아직 부족한게 많은거같아 슬프다

    다음번엔 키입력, 마우스지점으로 바라보게 등등  단순회전에 간단한 살을 붙여 작업을 끝내보려고한다

Designed by Tistory.