삼각함수?
- 한 각이 직각(90도)인 직각삼각형을 이루는 세 변은 각 위치에 따라 빗변, 밑변, 높이 라고 부른다.
- 다른 두 각은 모두 90도보다 작은 예각이다.
- 직각삼각형을 구성하는 세 변에서 두 변을 뽑아 각각의 비례관계를 나타낸 것은 삼각비(Trigonometric Ratio)라고 한다.
- 사인(Sine), 코사인(Cosine), 탄젠트(Tangent) 세가지가 대표적
- 밑변의 길이를 a, 높이의 길이를 b, 빗변의 길이를 c, 빗변과 밑변과의 사이각을 θ라고 할 때, 각 삼각비의 관계
sinθ = b/c
cosθ = a/c
tanθ = b/a
- 직각삼각형에서 측정할 수 있는 사잇각은 0도보다 크거나 90도보다 작아야한다.
- 위 그림과 같이 직각삼각형을 데카르트 좌표계 상에 배치하고 사잇각의 범위를 실수 전체로 확장한 대응 관계를 삼각함수(Trigonometric function)라고 한다.
- 가장 많이 사용하는 삼각함수인 sin과 cos 함수의 개념은 원점을 중심으로 반지름이 1인 평면 위의 원(Unit circle)을 사용해 나타내면 좀 더 쉽게 파악할 수 있다.
- 원의 반지름의 길이는 1이므로 빗변의 길이는 항상 1이다.
- 빗변에서 x축으로 수직선을 내려 직각삼각형을 그려보면 이 직각삼각형으로부터 삼각비를 계산할 수 있다.
- 빗변 c의 길이가 1이므로 삼각비 sinθ의 값은 높이 b와 같고 cosθ 값은 밑변 a와 같다.
sinθ = b/1 = b
cosθ = a/1 = a
- 데카르트 좌표계에서 빗변이 가리키는 단위 원의 좌표는 (cosθ, sinθ)로 표현할 수 있다.
- 이를 삼각함수로 확장하면 원주 위의 모든 좌표는 (cosθ, sinθ)에 대응한다.
- 밑변 a의 x좌표는 cosθ가 되고 높이 b의 y좌표는 sinθ가 된다.
- 이를 피타고라스 정리에 대입하면 아래와 같은 공식을 얻을 수 있다.
피타고라스 정리 = a^2 + b^2 = c^2
= cos^2θ + sin^2θ = 1
- 단위 원의 반지름 r을 일반화 시키면 반지름이 r인 원에서의 빗변은 벡터의 개념에서 길이가 1인 벡터와 평행
- 길이는 r배만큼 증가
- 스칼라 곱셈에 의해 r·(cosθ, sinθ)라는 좌표를 갖게 된다.
- 빗변의 길이가 r인 직각삼각형의 밑변 길이는 r·cosθ
- 높이의 길이는 r·sinθ가 된다.
- 피타고라스 정리에 의해 구한 식은 반지름의 길이와 무관하게 동일하게 성립함을 알 수 있다.
r^2·(cos^2θ + sin^2θ) = r^2
∴ cos^2θ + sin^2θ = 1
삼각함수 성질
- 데카르트 좌표계에서 각도는 x축에서 원의 궤적을 따라 반시계 방향으로 회전한 크기를 의미한다.
- 반지름이 1인 단위원에서 반시계 방향의 회전
- 아직 회전하지 않았을 때는 x축 상에 위치한 빗변의 좌표는 (1,0)
- 이 각도는 0도에 대응한다.
- 각도 0에 대한 sin 함수와 cos 함수의 값은 다음과 같다.
빗변 = (vx, vy) = (cos0, sin0) = (1, 0)
∴ sin0 = 0, cos0 = 1
- 각도를 0도에서 90도 까지 서서히 증가시키면서 회전하는 빗변의 좌표 vx와 vy의 변화
- 각도가 증가할수록 vx값은 감소하고 vy값은 증가한다.
- 목적지인 90도에 도달하면 y축 상에 위치한 좌표 (0, 1)과 일치하는 벡터가 만들어짐
- 좌표의 x값과 y값의 변화를 추적하면 위 그림과 같은 부드러운 곡선이 만들어짐
- 각도가 90도를 넘어서면 vx값은 0을 지나 음수가 되고, vy값은 다시 0을 향해 감소하기 시작한다
- 계속해서 한바퀴에 해당하는 360도 까지 빗변의 좌표 변화를 계속 관찰하면 아래와 같은 그래프가 그려짐
- sin 함수와 cos 함수의 그래프를 보면 [-1, 1] 범위내에서 360˚마다 반복된다.
- 변화 값의 범위를 진폭(Amplitude), 반복되는 각도를 주기(Period)라고 한다.
- sin 함수와 cos 함수의 성질을 정리하면 다음과 같다.
- sin 함수와 cos 함수는 항상 -1에서 1사이를 일정하게 반복하는 패턴을 띈다.
- sin 함수와 cos 함수의 값은 360˚ 주기로 반복된다.
- cos 함수는 y축을 기준으로 좌우 대칭의 성질을 가지고 있으며 짝함수(Even function)또는 우함수라고 부른다.
- sin 함수는 원점을 기준으로 원점 대칭 성질을 가지고 있으며 홀함수(Odd function)또는 기함수라고 부른다.
- sin 함수와 cos 함수 그래프가 지니는 홀함수와 짝함수의 성질은 아래와 같이 정리할 수 있다.
- 이는 회전과 관련된 계산에 유용하게 사용된다.
cos(-θ) = cos(θ)
sin(-θ) = -sin(θ)
- tan 함수는 빗변과 무관하게 밑변과 높이의 관계만을 나타낸다.
tanθ = b/a
- 위 식의 분자와 분모를 모두 빗변 값으로 각각 나누면 아래 수식과 같이 cos와 sin으로 tan 함수를 표현할 수 있다.
tanθ = (b/c) / (a/c) = sinθ / cosθ
- 분모의 값은 0이 될 수 없기 때문에 분모에 해당하는 cos 함수 값이 0이 되는 90도에서는 tan 값이 존재하지 않음
- 이는 270도인 경우, -90도, -270도인 경우에도 마찬가지로 적용
- tan 함수의 정의역에서는 위 구간이 포함되지 않는다.
각의 측정법
- 각(Angle)의 크기를 잴 때 0에서 360까지의 수를 사용하는 각도법(Degree)을 사용
- 각도법에서 기준으로 삼은 360이라는 수는 약수가 많아 원을 다양한 방법으로 쪼갤 수 있다.
- 이는 일상생활에서의 편리를 위한 것일 뿐, 360이라는 값은 표준으로 사용하기에는 너무 큰 수 임
- 벡터의 경우 크기를 비교하지 용의하도록 크기 1인 단위 벡터를 정의한 것 처럼, 각을 측정할 때도 단위량 1을 기반으로 상대적인 크기를 측정할 수 있는 체계가 있다면 합리적일 것
- 실무 계산에서 삼각함수를 응용할 때는 각도법 대신 호의 길이를 기준으로 각을 측정하는 방법을 사용
- 이를 호도법(Radian)이라 부른다.
- 호도법은 호의 길이가 1이 되는 부채꼴의 각을 기준으로 각을 측정
- 반지름이 1인 단위 반원의 호위 길이는 단위 벡터의 길이 1 보다 대략적으로 3.14배 더 크다.
- 단, 정확한 값을 구할 수 없다. (3.141592...)
- 이 값이 무리수인 원주율 파이(π)다.
- 호의 길이가 1인 부채꼴의 중심각은 몇도인가?
- 이 부채꼴의 각이 바로 호도법(Radian)에서 사용하는 각의 기준인 1rad(라디안)이다.
- 1라디안은 약 52.2958˚로 무리수다.
- 180˚인 반원의 각을 라디안으로 표현하면 라디안을 기준으로 π배만큼 클 것
- 따라서 각도법과 호도법 사이에는 다음 대응 관계가 성립함
- π(rad) = 180˚
- 각도와 호도는 서로 변환이 가능하다.
- 각도에서 라디안으로 변환 : degree * (π/180)
- 라디안에서 각도로 변환 : radian * (180/π)
물체의 회전
- 벡터의 회전은 생각보다 까다롭다.
- 물체를 이동시키고 늘리는 동작은 서로 수직인 x축과 y축이 독립적으로 적용된다.
- x축과 y축을 분리해 따로따로 계산 후 두 결과를 결합한 것과 동일함
- 하지만 회전이라는 동작은 x와 y값이 함께 영향을 미치기 때문에 독립적으로 계산할 수 없음
- 따라서 기저벡터의 개념을 활용해야 함
- 실벡터 공간 R^2는 두 표준기저벡터 e1과 e2를 기저로 둔 공간, 공간에 속한 모든 벡터 e1과 e2는 선형 결합에 의해 생성된다.
e1 = (1, 0)
e2 = (0, 1)
- e1과 e2가 각 θ만큼 회전한 좌표를 e1', e2'이라고 할때 좌표는 아래와 같이 변화함
e1' = (cos θ, sin θ)
e2' = (-sin θ, cos θ)
- 임의의 벡터 u = (x,y)에 대해 각 θ만큼 회전한 벡터 u' = (x', y') 을 구할수 있는 수식을 정리
u = (x, y) = x · e1 + y · e2 = x · (1,0) + y · (0,1)
u' = (x', y') = x · (cos θ, sin θ) + y · (-sin θ, cos θ)
= (x cos θ - y cos θ, x sin θ + y cos θ)
x' = x cos θ - y sin θ
y' = x sin θ + y cos θ
- 위 수식은 기저벡터를 활용하여 회전한 좌표를 구하는 방법을 나타낸다.
삼각함수의 역함수
- 게임 제작 과정에서는 거꾸로 주어진 벡터의 좌표로부터 이에 대응하는 각도를 얻어내는 작업도 필요하다.
- 이를 계산하기 위해 삼각함수의 역함수와 이에 대한 성질을 알아야 한다.
f(x) = sin(x)
f-1(x) = sin-1(x) = arcsin(x)
cos-1(x) = arccos(x)
tan-1(x) = arctan(x)
arcsin(아크 사인)
- 임의의 각 x에 대응되는 sin 함수는 다음과 같이 표기할 수 있다.
y = f(x) = sin(x)
- sin 함수가 가진 x와 y 사이의 대응 관계를 살펴보면 정의역의 여러 요소가 공역의 한 요소에 대응되는 것을 알 수 있다.
- 만일 공역의 범위를 실수 집합 전체가 아닌 [-1, 1] 구간으로 한정해 정의한다면, sin 함수는 전사함수의 성질을 띈다.
- 여기서 정의역의 범위를 좁혀 정의역의 한 요소가 공역의 한 요소에 대응되도록 전단사 함수를 만들어보면 정의역의 범위는 [-90, 90] 구간이 된다.
- 이렇게 어떤 함수를 전단사함수로 만든다면 sin(x)의 값이 주어졌을 때 거꾸로 각 x를 구할 수 있는 역함수가 존재하게 된다.
- 이와 같이 정의역과 공역의 범위를 제한시켜 얻은 sin 함수의 역함수를 arcsin(아크사인) 함수라고 부른다.
arccos(아크코사인)
- cos함수는 정의역의 여러 요소가 공역의 한 요소에 대응된다.
- cos 함수의 역함수를 구하기 위해 cos 함수가 전단사함수가 되도록 정의역과 치역을 제한해야한다.
- 전단사함수가 되기 위한 cos 함수의 정의역은 [0˚, 180˚], 공역은 [-1, 1]이다.
- 전단사함수가 되었기 때문에 cos x값이 주어졌을 때 거꾸로 각 x를 구할 수 있는 역함수가 존재하게 된다.
- 이렇게 생성된 역함수를 arcos(아크코사인) 함수라고 한다.
arctan(아크 탄젠트)
- tan 함수의 역함수를 구하기 위해서는 tan 함수가 전단사함수가 되어야한다.
- tan 함수의 치역은 실수 영역 전체인데 반해, 정의역이 존재하지 않는 구간이 존재한다.
- 따라서 정의역 구간을 제한해서 한정해야한다.
- tan 함수는 x 값이 -90˚와 90˚일 때의 y값이 존재하지 않으므로 전단사함수가 되기 위한 정의역 구간은 (-90˚, 90˚) 범위가 되어야 한다.
- arctan 함수는 벡터의 각도 를 구하는데 유용하게 사용된다.
- 임의의 벡터를 (x, y)라고 할 때 분수식 y/x를 계산해 벡터로부터 tan 함수 값을 얻을 수 있다.
- 이 tan 값을 arctan 함수에 넣으면 해당 벡터가 x축과 아루는 사잇각을 얻어낼 수 있다.
- arctan의 치역은 (-90˚, 90˚) 구간이므로 arctan 함수로 얻을 수 있는 각의 범위에는 한계가 있다.
- 이는 arcsin, arcos 함수도 동일
- 하지만 arctan 함수의 경우, 인자에 분수 y/x 값을 넣지 않고 x와 y의 두 값을 분리해 전달하면 4사분면 전체에 해당하는 각의 정보를 얻을 수 있다.
- 3사분면에 x값의 분호가 음이고, y의 부호도 음인 경우
- 분수값 y/x의 결과는 양수기 때문에, 이를 arctan 함수에 전달하면 3사분면의 정보는 사라지고 1사분면에 해당하는 각의 정보가 나온다.
- 따라서 처음에 사용한 벡터를 얻어낼 수 없음
- 하지만 두 값을 따로 전달하는 경우 두 값이 가지는 부호를 파악해 벡터가 1사분면에 있었는지 3사분면에 있었는지 팍악알 수 있음
- arctan 함수에는 y/x를 계산해 전달하는 함수와 x와 y를 따로 전달하는 함수 두 종류가 있다.
- x와 y를 따로 전달하는 arctan 함수를 atan2 함수라고 부른다.
- 이는 분수 y/x를 연상하기 쉽게 y값에 이어 x값을 전달하도록 설계되어 있다.
- atan2 함수를 활용하면 모든 사분면에 대응하는 각도를 얻을 수 있다.
- 각의 크기를 x축에 둔 atan2 함수의 그래프는 위 그림과 같으며 공역은 (-180˚, 180˚) 범위를 가진다.
극좌표계
- 회전은 x와 y가 함께 영향받은 동작이기 때문에 데카르트 좌표계로 회전을 구현하면 회전에 따른 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://m.yes24.com/Goods/Detail/107025224
https://wecandev.tistory.com/206
https://dev-sieun.tistory.com/31
https://walll4542developer.github.io/math/Trigonometric-functions/
https://sseong40.tistory.com/26
'게임수학' 카테고리의 다른 글
[게임수학] 벡터의 내적 (0) | 2024.04.22 |
---|---|
[게임수학] 어파인 공간(Affine space) (0) | 2024.04.22 |
[게임수학] 행렬 (0) | 2024.04.22 |
[게임수학] 벡터 (0) | 2024.04.22 |
[게임수학] 수 (0) | 2024.04.22 |