개발하는 리프터 꽃게맨입니다.

[수학] 삼각함수: 회전을 위한 수학 본문

컴퓨터 그래픽스/수학

[수학] 삼각함수: 회전을 위한 수학

파워꽃게맨 2024. 6. 28. 12:41

이전글

https://powerclabman.tistory.com/111

 

[수학] 벡터: 가상 공간의 탄생

이전글https://powerclabman.tistory.com/110 [수학] 수: 가상 세계를 구성하는 가장 작은 단위1. 수와 집합가상 세계를 이해하기 위한 첫걸음은 집합이라는 개념으로 수를 이해하는 것이다.중고등학교 수

powerclabman.tistory.com

 

여담)

예전 삼각비, 삼각함수 관련 포스팅에 중고등학생 분들이 꽤나 많이 들어오셨습니다.

공부하려고 들어오셨을텐데, 제가 포스트를 누구를 보여주는 목적으로 쓰는게 아니다 보니

지식을 획득하려는 용도로는 매우 부적합했을겁니다. 해당 포스팅도 그렇구요

(물론 이번 포스팅은 저번 포스팅보다 더욱 알차고 신경쓴 내용입니다.)

 

제가 다루는 삼각함수는 중고교수학에서 문제해결을 위한 삼각함수랑은 사뭇다릅니다.

2D, 3D 가상 세상을 정의하기 위한 삼각함수입니다. 물론 정의와 개념은 동일하지만,

중고교수학과는 목적이 많이 멀기에 참고하셔도 큰 도움안될겁니다.

 

그러나 2D, 3D 세상의 기저가 어떻게 되는지 궁금하다면 보시면 매우 흥미로울 겁니다.

 

1. 삼각함수

 

[1] 삼각함수

한 각이 직각(90')인 직각삼각형을 이루는 세 변은 각 위치에 따라

빗변(hypotenuse), 밑변(adjacent), 높이(opposite) 라고 부른다.

 

한 각이 직각이므로 나머지 두 각의 합이 90도가 되어야 한다.

따라서 두 각은 모두 90도보다 작은 예각이다.

 

빗변과 밑변의 사잇각은 θ를 이용해 아래와같이 나타낸다.

 

직각삼각형을 구성하는 세 변에서 두 변을 뽑아 각각의 비례관계를 나타낸 것을 삼각비trigonometric Ratio라고 한다.

삼각비에는 여러 종류가 있지만 사인sine, 코사인cosine, 탄젠트 tangent 세 가지가 가장 대표적이다.

밑변의 길이를 a, 높이의 길이를 b, 빗변의 길이를 c, 빗변과 밑변과의 사잇각을 θ라고 할 때,

각 삼각비의 관계는 다음과 같이 분수식으로 표현할 수 있다.

 

 

직각삼각형에서 측정할 수 있는 사잇각은 0보다 크거나 90보다 작아야 한다.

여기서 직각삼각형을 데카르트 좌표계 상에 배치하고 사잇각의 범위를 실수 전체 집합으로 확장한 대응 관계를

삼각함수라고 한다.

 

일반적으로 사용하는 삼각함수 sin, cos 함수의 개념은

원점을 중심으로 반지름이 1인 평면 위의 단위원을 사용하면 좀 더 쉽게 파악할 수 있다.

 

원 위의 임의의 점을 찍고

원점과 점을 연결한다.

이 때, 이 벡터의 크기는 1이다.

 

그리고 해당 벡터와 양의 x축의 사잇각을 θ라고 하자.

 

 

그럼 이 때, 이 직각삼각형으로부터 삼각비를 계산할 수 있다.

빗변 c의 길이가 1이기에

b = cos θ

a = sin θ

라고 할 수 있다.

 

따라서 데카르트 좌표계에서 빗변이 가리키는 단위 원의 좌표는 (cos θ, sin θ) 로 표현할 수 있는데,

이를 삼각함수로 확장하면 원주 위의 모든 좌표는 (cos θ, sin θ)에 대응한다.

 

 

또, 피타고라스 정리에 대입하면

cos² θ + sin² θ = 1

이라는 공식을 얻을 수 있다.

 

이제 빗변이 r인 원에서 정의한 직각삼각형에 대해서 생각해보자.빗변을 벡터의 개념으로 봤을 때해답은 (r cos θ, r sin θ) 라고 할 수 있다.

 

그렇다. 스칼라 곱셈이다.

 

 

그러므로 이 식은 반지름의 길이와 무관하게 항상 성립하고이 식은 삼각함수의 기본을 이루는 중요한 공식이다.

 

[2] 삼각함수의 성질

데카르트 좌표계에서 각도는 x축에서 원의 궤적을 따라 반시계 방향으로 회전한 크기를 의미한다.

반지름이 1인 단위 원에서 반시계 방향의 회전을 생각해보자.

아직 회전하지 않아 x축 상에 위치한 빗변 v의 좌표는 (1,0)인데, 이 각도는 0'에 대응한다고 할 수 있다.

따라서 각도 0'에 대한 sin 함수와 cos 함수의 값은 다음과 같다.

 

이제 사잇각 θ를 증가시키면서 vx, vy의 변화를 살펴보자.

 

각도가 증가할수록 x값은 작아지고, y값은 증가한다.

즉, θ가 증가하면 cos θ는 작아지고, sin θ는 증가함을 알 수 있다.

 

각도가 90'에서는cos θ = 0,sin θ = 1 된다. 

 

θ 값에 따라 cos θ와 sin θ 값의 변화는 다음 그래프를 보면 더 쉽게 이해할 수 있다.

 

sin θ와 cos θ는 둘 다

θ가 변화함에 따라 -1에 도달할 떄까지 계속 감소하다.

-1에 도달하면 방향을 바꿔서 1을 향해 증가하며, 1에 도달하면 다시 -1을 향해 감소하는 패턴을 반복한다.

이러한 값의 변화는 [-1, 1] 범위 내에서 360' 마다 반복되는데,

변화 값의 범위를 진폭, 반복되는 각도를 주기라고 한다.

 

 

위 그래프로부터 sin 함수와 cos 함수의 성질을 정리하면 다음과 같다.

(1) sin 함수와 cos 함수는 [-1, 1]의 치역을 가진다.

(2) sin 함수와 cos 함수의 값은 360' 주기로 반복된다.

(3) cos는 y축을 기준으로 좌우대칭인 우함수이다.

     sin은 원점을 기준으로 대칭은 기함수이다.

 

cos θ 는 우함수이기 때문에,

cos θ = cos (-θ) 관계를 만족하고

sin θ 는 기함수이기 때문에,

- sin θ = sin (-θ) 관계를 만족한다.

 

 

이번엔 tan 함수에 대해서 알아보자.

tan 함수는 빗변과 무관하게 밑변과 높이의 관계를 나타낸다.

단위 원에서 정의한 직각삼각형의 밑변과 높이를 각각 cos θ, sin θ 로 정의하기에

 

로 나타낼 수도 있습니다.

 

단, 분모의 값은 0이 될 수 없기 때문에 

θ = 90 * 180 * n (n은 정수)

에 대해서는 tan θ 는 정의되지 않습니다.

 

 

 

[3] 각의 측정법

우리는 일상 생활에서 각의 크기를 잴 때 0에서 360까지의 수를 사용하는 육십분법, 각도법 을 사용한다.

각도법에서 기준으로 삼는 360이라는 수는 약수가 많아 다양한 방법으로 쪼개어 활용할 수 있기에 일상생활에서 매우 편리하다.

 

그러나 360이라는 값을 표준으로 사용하기에는 너무 큰 수다.

벡터의 경우 크기를 비교하기 용이하도록 크기 1의 단위 벡터를 정의한 것처럼, 각을 측정할 때 도 단위량 1을 기반으로 상대적인 크기를 측정할 수 있도록 체계를 만들면 합리적일 것이다.

 

그래서 일반저긍로 삼각함수를 응용할 때는 각도법 대신 호의 길이를 기준으로 각을 측정하는 호도법을 사용한다.

 

호도법은 호의 길이가 1이 되는 부채꼴의 각을 기준으로 각을 측정한다.

호도법의 단위 각을 측정하는 방법을 살펴보자.

 

반원의 호 길이를 재기 위해 반원을 1만큼 양의 x축 방향으로 평행이동시킨다.

 

그러고 나서 반원의 왼쪽 끝을 고정한 후 x축의 양의 방향으로 반원의 오른쪽 끝점을 잡아 당겨서 x축 위에 쭉 펼친 후,

그 길이를 x축 상의 단위 벡터와 함께 비교해보자.

 

반원의 호 길이는 단위 벡터의 길이 1보다 대략적으로 3.14배 더 큰데,

무리수이기에 정확한 값은 구할 수는 없다.

이것이 원주율 π 이며, 그 값은 대략 3.141592.... 이다.

 

180'에 해당하는 반원의 호 길이가 π임을 알았으니, 이번에는 거꾸로 호의 길이가 1인 부채꼴의 중심각은 몇 도인지

알아보자.

 

호의 길이를 1로 설정하면 위와 같은 부채꼴이 나오는데,

이 부채꼴의 각이 바로 호도법에서 사용하는 각의 기준이 1rad이다.

1라디안은 각도로 환산하면 약 57.2958'가 되며 이 역시 π와 같은 무리수이다.

 

180'에 해당하는 반원의 각을 라디안으로 표현하면

반원의 호 길이는 π이므로 각 역시 라디안을 기준으로 π배만큼 클 거서이다.

따라서 육십분법과 호도법 사이에는 다음의 대응 관계가 성립한다.

 

π rad = 180'

 

이 수식을 응용해 다음의 변환식을 만들 수 있다.

 

1 rad = 180' / π

1 ' = π / 180' (rad)

 

아래는 일반적으로 흔하게 사용하는 각도와 대응하는 호도법이다.

 

 

2. 삼각함수를 활용한 물체의 회전

이번에는 삼각함수를 활용해 물체의 회전을 구현해보자.

벡터의 회전은 생각보다 까다롭다.

물체를 이용시키고 크기를 늘리는 동작은 x축과 y축이 서로 독립적으로 적용된다.

따라서 x축과 y축을 분리해 따로따로 계산한 후 두 결과를 결합한 것과 동일하다.

 

하지만 회전이라는 동자가은 x와 y값이 함께 영향을 미치기 때문에 x축과 y축을 분리해 독립적으로 계산할 수 없다.

회전을 구현하기 위해 기저벡터의 개념을 활용해보자.

 

우리가 사용하는 실벡터 공간 R²는 두 표준기저벡터 e1, e2 를 기저로 둔 공간이고, 공간에 속한 모든 벡터는 e1과 e2의 선형 결합에 의해 생성된다.

 

회전을 위해 실벡터 공간 R² 전체를 각 θ 만큼 회전시켜보자.

그러면 두 표준기저벡터 e1과 e2의 좌표는 다음과 같이 변화될 것이다.

 

 

표준 기저벡터 e1이 θ 만큼 회전한 좌표는 (cos θ, sin θ)이 된다.

이를 e1' 라고 하자.

 

표준 기저벡터 e2가 각 θ 만큼 변환 좌표는 (-sin θ, cos θ)이 된다.

이를 e2' 라고 하자.

 

그렇다면 실벡터 R² 의 벡터가 각 θ만큼 회전하면 어떻게 변화되는지 수식으로 확인해보자.

이를 위해 좌표 (1, 1)의 값을 가진 벡터 v를 사용해보겠다.

회전하기 전에 벡터 v는 표준기저벡터의 선형 결합으로 표현하면 다음과 같다.

 

v = 1 e1 + 1 e2

 

여기서 벡터 v가 각 θ만큼 회전한 벡터 v'는 위 선형 결합식의 e1와 e2를 회전된 표준기저벡터

e1'와 e2'를 사용해 다음의 선형 결합식으로 표현할 수 있다.

 

v = 1 e1' + 1 e2'

 

따라서 좌표 (1, 1)이 각 θ 만큼 회전한 벡터 v'의 좌표는 다음과 같다.

 

이와 동일한 원리로 임의의 벡터 u = (x, y) 에 대해 각 θ만큼 회전한 벡터 u' = (x', y') 을 구할 수 있는 일반적인 수직을 전개해보면 다음과 같다.

 

실벡터 공간 R² 의 두 표준기저벡터를 e1, e2라고 할 때 각 θ만큼 회전한 벡터 u'은 다음의 수식으로 정리할 수 있다.

 

 

따라서 임의의 벡터 (x, y)가 각 θ만큼 회전된 결과 (x', y') 는 다음과 같다.

 

x' = x cos θ - y sin θ y' = x sin θ + y cos θ

 

3. 삼각함수의 역함수

지금까지 삼각함수를 사용해 주어진 각에 대응하는 벡터의 좌표를 얻는 방법을 알아보았다.

그러나 역으로 특정 벡터의 좌표로부터 이에 대응하는 각도를 얻어내는 작업도 필요하다.

이를 계산하려면 삼각함수의 역함수를 사용해야 한다.

 

 

역함수가 존재하려면 전단사함수여야 한다.

일대일대응(단사함수)임과 동시에 공역과 치역이 같아야(전사함수)한다.

 

그러나 실수 집합 정의역에서 정의되는 sin 함수를 보면

일대일 함수도 아닐 뿐더러,

공역은 실수이지만 치역은 [-1, 1]이다.

 

그러므로 사인 함수는 역함수를 가질 수 없다.

 

만일 공역의 범위를 실수 집합 전체가 아닌 [-1, 1] 구간으로 한정하고

정의역의 범위를 [- π/2, + π/2] 로 제한한다면

사인 함수를 전단사함수로 정의할 수 있고,

 

이러한 정의에 따라 사인 함수는 역함수를 가질 수 있게 된다.이렇게 얻은 sin 함수의 역함수를 arcsin 함수라고 부른다.

 

arcsin은정의역 [-1, 1] 공역 [- π/2, + π/2]  에서 정의됨에 주의하라

 

 

그래프는 위와 같다.

 

 

이와 동일하게 cos 함수의 역함수를 구하면 다음과 같다.

 

 

마지막으로 tan 함수의 역함수에 대해서 알아본다.

 

tan 함수의 정의역은 실수, 공역은 실수

(단, π/2 + nπ (n은 정수) 에 대해서는 정의되지 않음)

 

tan 함수를 전단사함수로 만들어보자tan 함수는  π/2 + nπ 에서 정의되지 않기 때문에

 

정의역을 (- π/2, π/2) 로 제한해서 전단사함수로 만들 수 있다.이에 따른 arctan 함수의 그래프는 다음과 같다.

 

arctan함수는 벡터의 각도를 구하는 데 유용하게 사용된다.

 

1사분면 원주위의 임의의 점을 P(x, y) 라고 하자

x축과의 벡터의 사잇각을 θ라고 하면

arctan과 좌표를 이용해 사잇각 θ를 구할 수 있다.

 

그런데 arctan의 치역은 (- π/2, π/2) 라는 한계점이 있다.즉 대략 -89.9 ~ 89.9 정도의 각도까지만 구할 수 있다는 것이다.

 

 

위 직선 위 임의의 점 (-a, -b) (단, a b는 양수) 를 생각해보자.

θ2를 구하고자 arctan(-b/-a) 를 사용한다고 해보자.

그러나 -b/-a = b/a 이기 때문에

arctan(-b/-a) = θ1 일 것이다.

즉, 일반적인 arctan로는 3사분면 점에 대한 사잇각을 구할 수 없게 된다.

 

이러한 문제점은 매개변수인 x값, y값의 부호를 판단하면 해결할 수 있다.

위 코드처럼

x와 y의 부호를 판단하여 적절하게 값을 보정해주면

arctan의 치역을 (-180, 180) 으로 확장할 수 있다.

 

이러한 확장형태의 arctan 함수는 많은 라이브러리에서 지원하고 있으며

일반적으로 atan2 햠수라고 부른다.

atan2 를 사용하면 평면의 모든 사분면에 대응하는 각도를 얻을 수 있다.

 

arctan2의 그래프는 위 처럼 생겼다.

 

4. 극좌표계

 

물체를 이동시키고 크기를 늘리는 동작은 x와 y가 독립적으로 적용되는 움직임인데 반해

회전은 x와 y가 함께 영향받는 동작이다.

따라서 데카르트 좌표계로 회전을 구현하면 회전에 따른 x와 y의 변화를 매번 계산하는 번거로움이 발생한다.

 

회전 동작을 기반으로 설게된 좌표계를 고안해 사용한다면, 회전을 편리하게 관리하고 구현할 수 있게 된다.

그것이 바로 극좌표계이다.

좌표계는 원점으로부터의 거리 r과 각 θ의 두 요소로 구성되며 극좌표계의 좌표는 (r, θ) 로 표시한다.

 

극좌표계는 위 그림과 같이 동심원의 형태로 평면의 모든 점을 표현하며,주로 시간에 따른 회전의 움직임을 구현하거나 회전에 관련된 효과를 연출할 때 활용된다.

 

(1) 데카르트 좌표계 -> 극좌표계 변환

 

(2) 극좌표계 -> 데카르트 좌표계 변환