회전은 원의 궤적을 따라 이동하는 움직임이기 때문에 이를 이해하려면 원과 밀접하게 연결되어있는 삼각함수를 알아야 합니다.
삼각함수
한 각이 직각(90도)인 직각삼각형을 이루는 세 변은 각 위치에 따라 빗변, 밑변, 높이 라고 부릅니다.
직각삼각형을 구성하는 세 변에서 두 변을 뽑아 각각의 비례관계를 나타낸 것은 삼각비(Trigonometric Ratio)라고 합니다. 사인(Sine), 코사인(Cosine), 탄젠트(Tangent) 세가지가 대표적
sinθ = b/c
cosθ = a/c
tanθ = b/a
직각삼각형을 데카르트 좌표계 상에 배치하고 사잇각의 범위를 실수 전체로 확장한 대응 관계를 삼각함수(Trigonometric function)라고 합니다.
$r^2(cos^2θ+sin^2θ)=r^2$
$∴cos^2θ+sin^2θ=1$
1. 삼각함수의 성질
데카르트 좌표계에서 각도(angle)는 x축에서 원의 궤적을 따라 반시계 방향으로 회전한 크기를 의미합니다.
각도를 0도에서 90도까지 서서히 증가시키면서 회전하는 빗변의 좌표 Vx와 Vy의 변화를 살펴봅시다. 각도가 증가할수록 Vx값은 감소하고 Vy값은 증가합니다.
이런 값의 변화는 [−1,1] 범위 내에서 360도마다 반복되는데, 변화값의 범위를 진폭(Amplitude), 반복되는 각도를 주기(Period)라고 합니다.
sin 함수와 cos함수의 성질을 정리하면 다음과 같습니다.
- sin 함수와 cos 함수는 항상 -1에서 1사이를 일정하게 반복하는 패턴을 띤다.
- sin 함수와 cos함수의 값은 360˚ 주기로 반복된다.
- cos함수는 y축을 기준으로 좌우 대칭의 성질을 가지고 있으며 짝함수(Even function)또는 우함수라고 부른다.
- sin함수는 원점을 기준으로 원점 대칭 성질을 가지고 있으며 홀함수(Odd function)또는 기함수라고 부른다.
cos(-θ) = cos(θ) // 짝함수의 성질
sin(-θ) = -sin(θ) // 홀함수의 성질
tan 함수는 빗변과 무관하게 밑변과 높이의 관계만을 나타냅니다.
tanθ = (b/c) / (a/c) = sinθ / cosθ
분모의 값은 0이 될 수 없기 때문에 분모에 해당하는 cos 함수 값이 0이 되는 90도에서는 tan 값이 존재하지 않습니다. 이는 270도, -90도, -270도의 경우에도 마찬가지로 tan 함수의 정의역에서는 위 구간이 포함되지 않습니다.
tan 함수는 sin함수와 동일하게 홀함수의 성질을 지님을 알 수 있습니다.
2. 각의 측정법
일상 생활에서 각의 크기를 잴 때 0에서 360까지의 수를 사용하는 각도법(Degree)을 사용합니다. 실무 계산에서 삼각함수를 응용할 때에는 각도법 대신 호의 길이를 기준으로 각을 측정하는 호도법(Radian)을 사용합니다.
반원의 호의 길이는 파이(π)이므로, 거꾸로 호의 길이가 1인 부채꼴의 중심각은 호도법에서 사용하는 각의 기준인 1rad(라디안)입니다.
$π(rad) = 180˚$
$1(rad)=(180/π)˚$
삼각함수를 활용한 물체의 회전
물체를 이동시키고 크기를 늘리는 동작은 x축과 y축이 서로 독립적으로 적용돼 따로 계산 후 결합한 것과 동일합니다. 하지만 회전은 x와 y값이 함께 영향을 미치기 때문에 독립적으로 계산할 수 없어 까다롭습니다.
삼각함수의 역함수
게임 제작 과정에서는 거꾸로 주어진 벡터의 좌표로부터 이에 대응하는 각도를 얻어내는 작업도 필요합니다. 이를 계산하기 위해 삼각함수의 역함수를 알아야 합니다.
sin 함수가 가진 x와 y 사이의 대응 관계를 살펴보면 정의역의 여러 요소가 공역의 한 요소에 대응되는 것을 알 수 있습니다.
공역의 범위를 [-1, 1] 구간으로 한정하고 정의역의 범위를 좁혀 정의역의 한 요소가 공역의 한 요소에 대응되도록(정의역의 범위는 [-90˚, 90˚] 전단사함수를 만들면 역함수가 존재하게 됩니다.
이와 같이 정의역과 공역의 범위를 제한시켜 얻은 sin 함수의 역함수는 arcsin(아크사인) 함수입니다.
$f^{-1}(x) = sin^{-1}(x) = arcsin(x)$
동일하게 cos 함수의 역함수를 구하려면 정의역은 [0˚, 180˚], 공역은 [-1, 1]
tan 함수의 역함수를 구하려면 정의역은 -90˚와 90˚ 값을 제외한 (-90˚, 90˚) 범위
arctan 함수는 벡터의 각도를 구하는 데 유용하게 사용됩니다.
극좌표계
데카르트 좌표계로 회전을 구현하면 회전에 따른 x와 y의 변화를 매번 계산하는 번거로움이 발생합니다. 회전 동작을 기반으로 설계된 좌표계, 극좌표계(Polar coordinate system)를 사용한다면 편리하게 회전을 관리하고 구현할 수 있습니다. 이는 원점으로부터의 거리 r과 각 θ의 두 요소로 구성되며 극좌표계의 좌표는 (r, θ)로 표시합니다.
데카르트 좌표계로 표현된 벡터 (x, y)는 벡터의 크기와 arctan 함수를 사용해 아래와 같이 극좌표계 (r, θ)로 변환될 수 있습니다.
$r = \sqrt{x^2+y^2}$
$θ = atan2(y,x)$
반대로 극좌표계의 좌표 (r, θ)를 데카르트 좌표계 (x, y)로 변환하는 식은 삼각함수를 사용해 구할 수 있습니다.
$x = r · cosθ$
$y = r · sinθ$
출처 : 이득우의 게임수학,
https://hanseongbugi2study.tistory.com/172
https://walll4542developer.github.io/math/Trigonometric-functions/
'책 > 이득우의 게임 수학' 카테고리의 다른 글
[게임수학] 행렬: 가상 세계의 변환 도구 (1) | 2024.12.30 |
---|---|
[게임수학] 벡터: 가상 공간의 탄생 (2) | 2024.12.20 |
[게임수학] 수: 가상 세계를 구성하는 가장 작은 단위 (2) | 2024.12.19 |