[게임수학] 삼각함수
삼각함수
직각삼각형을 구성하는 세 변에서 두 변을 뽑아 각각의 비례관계를 나타낸것을 삼각비라고 하며 대표적으로는 사인(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 이다.
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° | 2π |
삼각함수를 이용한 회전
반지름이 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의 역함수
$$y = f(x) = sin(x)$$
$$f^{-1}(x) = sin^{-1}(x) = arcsin(x)$$
cos의 역함수
tan의 역함수
아크탄젠트는 벡터의 각도를 구하는데 유용하게 사용된다. 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 |