Game Programming/게임 수학

[게임수학] 삼각함수

Doanie 2022. 9. 28. 22:55

[게임수학] 삼각함수


삼각함수

직각삼각형을 구성하는 세변

직각삼각형을 구성하는 세 변에서 두 변을 뽑아 각각의 비례관계를 나타낸것을 삼각비라고 하며 대표적으로는 사인(Sine), 코사인(Cosine), 탄젠트(Tangent)가 있다.

데카르트 좌표 위 직각삼각형

위 직각삼각형을 데카르트 좌표계상에 배치를 하고 사잇각의 범위를 실수 전체로 확장을 한 대응관계를 삼각함수(Trigonometric Function)이라고 한다.

만약 반지름 r = 빗변 = c = 1, 높이 = b, 밑변 = a 일때,
sinθ = 높이 / 빗변 = b / c = b /1 = b
cosθ = 밑변 / 빗변 = a / c = a / 1 = a 
즉, 삼각함수 a² + b² = c² 에 대입하면 cos²θ + sin²θ = 1 이다.

삼각함수의 성질

반지름이 1인 원에서 만약 회전을 하지 않은 상태, 즉, v가 (1, 0)인 상태는 각도가 0°인 상황을 의미한다.
그러므로 v = (vx, vy) = (1, 0) = (cos0°, sin0°)
∴  cos0° = 1, sin0° = 0 이다.

각도에 따른 Sin, Cos 그래프

cos(-θ) = cosθ, sin(-θ) = -sinθ
tanθ = b / a = (b / c) / (a / c) = sinθ / cosθ
∴  tan = sinθ / cosθ

호도법

호의 길이를 이용해서 각도를 표시하는 방법이다.

a° : r = 360° : 2πr
2πr * a° = r * 360°
a° = r * 360° / 2πr  = 180° / πr
즉, 부채꼴 호의 중심각 a는 반지름에 상관없이 항상 일정한 값을 갖게되는데 이 값을 1라디안(㎭)라고한다.
1㎭ = 180° / πr
1라디안은 약 52.2958°이며 π와 같이 무리수이다.

만약 반지름 r이 1인 원에서 r = 1
1㎭ = 180° / π
π(㎭) = 180°
1° = π/180(㎭)
각도법 호도법
30° π/6
45° π/4
60° π/3
90° π/2
180° π
360°

삼각함수를 이용한 회전

반지름이 1인 원에서
표준 기저벡터 (1, 0)을 e₁이라고 가정할 때, e₁가 θ만큼 회전을 하면 삼각형의 밑변은 cosθ, 높이는 sinθ이므로
∴ e₁'  = (cosθ, sinθ)

표준 기저벡터 (0, 1)을 e₂이라고 가정할 때, e₂가 θ만큼 회전을 하면 삼각형의 밑변은 cosθ, 높이는 -sinθ이므로
∴ e₂'  = (-sinθ, cosθ)

좌표가 (1, 1)인 벡터를 v라고 가정할 때, v = (1, 0) + (0, 1) = e₁ + e₂
이 v를 θ만큼 회전시킨다면
v' = e₁' + e₂'
   = (cosθ, sinθ) + (-sinθ, cosθ)
   = (cosθ - sinθ, sinθ + cosθ)
∴ v' = (cosθ - sinθ, sinθ + cosθ)

좌표가 (x, y)인 벡터를 u라고 가정할 때, u를 θ만큼 회전시킨 벡터는 u' = (x', y')
x' = x(cosθ - sinθ) = xcosθ - xsinθ
y' = y(sinθ + cosθ) = ysinθ + ycosθ 
∴ u' = (xcosθ - xsinθ, ysinθ + ycosθ)

삼각함수의 역함수


sin의 역함수

아크사인(arcsin)

$$y = f(x) = sin(x)$$

$$f^{-1}(x) = sin^{-1}(x) = arcsin(x)$$


cos의 역함수

아크코사인(arccos)


tan의 역함수

아크탄젠트(arctan)

아크탄젠트는 벡터의 각도를 구하는데 유용하게 사용된다. v = (x, y)라는 임의의 벡터가 있을 때 분수식 y/x를 계산하여 tan함수값을 얻고 이 tan값을 arctan함수에 넣으면 사잇각을 얻을 수 있다. 하지만 arctan의 값은 -90°~ 90°까지밖에 얻을 수 있는 각의 한계가 존재한다. 즉, 벡터 v의 x,y가 음수일 경우에 원하는 값을 구할수 없다.

 

이 상황에서 x,y를 분수식(y/x)로 보내는 것이 아니라 값을 따로 전달한다면 모든 사분면에 대응하는 각도를 얻을 수 있으며, 이를 atan2 함수라고 부른다.

$$atan2(y, x)$$


극좌표계 (Polar Coordinate System)

데카르트 좌표계로 회전을 구현할 시 회전에 따른 x,y의 변화를 매번 계산해야하는 번거로움이 생긴다. 이를 위해 회전을 관리하고 구현할 수 잇게 고안된 좌표계를 극좌표계라고 한다.

원점으로 부터 거리 r과 각 θ로 구성이 되며 (r, θ)로 표시한다.

 

데카르트 좌표계로 표현된벡터(x, y)를 극좌표계로 표현한다면

$$r = \sqrt{x^{2}+y^{2}}$$

$$θ = atan2(y, x)$$

 

극좌표계(r, θ)를 데카르트 좌표계로 표현한다면

$$x = r\cdot \cos \theta$$

$$y = r\cdot \sin \theta$$


기존의 벡터의 덧셈과 곱셈을 사용하여 벡터의 직선적인 움직임을 표현할 수 있었다. 더나아가 삼각함수를 이용한다면 벡터의 회전을 적용시킬 수 있다는 사실을 알았다. 

'Game Programming > 게임 수학' 카테고리의 다른 글

[게임수학] 벡터  (0) 2022.09.27
[게임수학] 함수  (0) 2022.09.21
[게임수학] 수  (0) 2022.09.20