본문 바로가기
Computer Graphics/Math

[Math] 삼각함수

by 진현개발일기 2023. 12. 3.

■ 각도법, 호도법

각도법 (Degree) 호도법 (Radian)
180˚ π
180 / π˚ 
1˚ π/180 
90˚ π/2
60˚ π/3
45˚ π/4
120˚ 2π/3

 

★ 왜 호도법을 배우냐면 컴퓨터에서 Sin, Cos, Tan을 다룰 때는 기본적으로 호도법을 기준으로 전개하기 때문이다.

 

■ 삼각비

 

(출처) https://en.wikipedia.org/wiki/Sine_and_cosine#/media/File:Circle_cos_sin.gif

 

[간단한 공식]

1. Sin(θ) != Sin(-θ)
2. Sin(θ) = -Sin(-θ)
3. Cos(θ) = Cos(-θ)

 

■ 역함수

역함수가 존재하기 위해선 해당 함수는 전단사함수 이어야한다. 하지만 Sin, Cos, Tan 함수는 전단사 함수가 아니다. 전사함수에는 해당되지만 단사함수가 아니기 때문이다. 따라서 Sin, Cos, Tan를 단사함수로 만들기 위해서는 의도적으로 정의역의 값의 범위를 정하여 제한해주면 전단사함수로 변환하여 역함수를 만들어 낼 수 있다.

 

 

* 삼각함수가 전단사 함수가 될 수 있는 구간

함수 구간
Sin -π/2 ~ π/2 
(-90˚ ~ 90˚)
Cos   0 ~ π
(0˚ ~ 180˚)
Tan   -π/2, π/2를 제외한 나머지

 

Sin (y=sinx)의 전단사 함수 구간 [-π/2 ~ π/2]

 

Cos (y=cosx) 의 전단사 함수 구간 [0,  π]

 

Tan (y=tanx) 의 전단사 함수 구간

 

위에서 전단사함수가 될 수 있는 구간(일대일 대응 및 전사함수)을 파악하였고,

이는 역함수의 치역과 동일하다는 것을 알 수 있다.

역함수 치역 구간
arcsin -π/2 ~ π/2 
(-90˚ ~ 90˚)
arccos   0 ~ π
(0˚ ~ 180˚)
arctan   -π/2, π/2를 제외한 나머지

 

위와 같은 sin, cos, tan를 알고있다면 몇 도이냐를 파악할 때 유용하게 사용하는데 문제는 0~180도는 arccos, -90~90도는 arcsin을 통하여 알 수 있으나 제3사분면의 값인 (-180 ~ -90)도는 알 수가 없다. 왜냐하면 역함수의 기본 조건은 함수의 전단사 함수 조건을 만족해야하기 때문에 일정 구간을 버렸고 그로 인하여 특정 사분면의 값들만 알 수가 있다.

그래도 유추할 수 있는 방법은 arctan를 이용하여 알 수가 있다.

■ atan2

탄젠트는 '높이/밑변' 이다. 실제로 양수 값이 나오는 경우는 x, y 두 개다 +부호를 갖거나 -부호를 갖게 되는 경우인데
둘 중 하나가 -일 경우에는 조금 얘기가 달라진다. 그래서 부호정보를 추가로 역함수에 전달할 수 있다면 둘의 구분이 가능해지는데
atan2(y, x)함수가 값과 부호 두 가지의 인자를 전달받는 함수이다. 그러므로 어떤 벡터의 각을 알고 싶다면 탄젠트의 역함수 atan2를 사용한다.

그러므로 atan2를 사용하게 된다면 4사분면을 모두 커버할 수 있는 각을 우리가 얻어낼 수 있게 된다.

■ Unity

 앞서 공부했던 내용을 토대로 유니티에서 기본적인 벡터의 회전 변환을 구현하였다.

x, y축을 세팅하고 초록색 동그라미가 움직일 객체가 된다.

 

 

코드는 아주 기본적으로 짰다. 증분값 (increment)을 통하여 원하는 위치에 벡터를 스팬할 수 있도록 설정하였고 증분값의 절대값 크기만큼 원점으로 부터 멀어질 것이다.

 

원리는 단위벡터[(0,1), (1,0)..]에 관한 cos, sin값을 구한 뒤 해당 각도를 향해 객체가 얼마나 떨어져있는지를 increment로 곱해서 정해주기 때문이다. 변수명이 지금 보니 미스매칭하는 것 같은데 increment 보단 벡터의 크기인 Norm이나 단순하게 distance가 어울릴 것 같다.

 

추가로 atan2함수를 통하여 실제 각도(Degree)가 얼마나 되는지 구하고자 하였다. 

 

Atan를 통하여 실제 각도 값을 확인할 수 있다. (Degree는 증분을 통하여 끝없이 증가할 수 있기 때문에 원점과 객체 사이의 실제 각도는 atan을 통하여 알아보았다)
제3사분면 (-, -)에 도달하였고 arcsin, arccos로 구할 수 없었던 -180도를 arctan2함수를 통하여 구한 모습
-90도 까지 정상적으로 구하였다.

 

 

■ GIF

 

 

 

 

[참고]

 

이득우의 게임 수학 | 이득우 - 교보문고

이득우의 게임 수학 | 39가지 실시간 렌더링 게임 프로그래밍 실습 예제를 하나씩 따라 해보며 독자가 직접 체득하는 흥미로운 게임 수학의 세계! 게임 개발자와 그래픽 아티스트들이 궁금해 했

 

728x90