각도의 표현 : degree vs radian
# 주로 n˚(n도)로 표시하는 degree각은 원의 각도를 360도로 나누는 60분법에서 쓰이는 각도이다.
# 주로 nπ로 표시하는 라디안각은 각을 호의 길이와 반지름의 비율로 나타내는 호도법에서 쓰이는 각도이다.
# 특수각의 변환
degree |
0˚ |
30˚ |
45˚ |
60˚ |
90˚ |
120˚ |
135˚ |
150˚ |
180˚ |
270˚ |
360˚ |
radian |
0 |
1/6*π |
1/4*π |
1/3*π |
1/2*π |
2/3π |
4/3*π |
5/6*π |
π |
3/2*π |
2π |
# degree를 radian으로 변환 : n˚ * π/180˚ = nπ
# radian을 degree로 변환 : nπ * 180˚/π = n˚
# 그런데 프로그래밍시에는 결국 파이값을 근사치의 상수로 정의해서 쓰기 때문에
# degree를 radian으로 변환 : n˚ * DtR = n (DtR = 0.017453293f)
# radian을 degree로 변환 : n * RtD = n˚ (RtD = 57.29577951f)
삼각함수 (직각삼각형을 이용한 정의)
a = 높이 [기준각에 대한 대변(對邊)], b = 밑변 [기준각과 직각 사이의 변], h = 빗변 [직각에 대한 대변(對邊)]
주의! 기준각이 A일때는 변a가 높이, 변b가 밑변이 되지만, 기준각이 B라면 변b가 높이, 변a가 밑변이 된다.
그러므로 sinA = a/h, cosA = b/h, tanA = a/b 는 기준각이 A일때 이야기다.
기본 삼각함수 : [사인(sine)] sin = 높이/빗변, [코사인(cosine)] cos = 밑변/빗변, [탄젠트(tangent)] tan = 높이/밑변
삼각함수의 역 : [코시컨트(cosecant)] csc = 1/sin, [시컨트(secant)] sec = 1/cos, [코탄젠트(cotangent)] cot = 1/tan
# 기본 삼각함수는 C++에서 <cmath> 헤더를 포함하고, sin(x), cos(x), tan(x) 함수로 사용할 수 있다. 이때 x값은 라디안 값이다.
# 삼각비의 역에 대해서는 C++에서 따로 함수로 제공하지 않는다.
삼각함수 (단위원을 이용한 정의)
중요! 아래 두개가 가장 중요함. (|AB|는 선분AB를 의미)
sinA = |BC|/|AB| = |BC|/1 ∴ |BC| = sinA
cosA = |AC|/|AB| = |AC|/1 ∴ |AC| = cosA
삼각형BAC와 삼각형DAE는 한 각을 공유하는 두개의 직각삼각형이므로 두 각이 같은 AA닮음.
∴ 두삼각형의 변끼리의 비가 서로 같다.
|AC| : |BC| = |AE| : |DE| ⇒ cosA : sinA = 1 : |DE| ⇒ sinA = |DE|*cosA ⇒ |DE| = sinA/cosA = tanA ∴ |DE| = tanA
|AB| : |AC| = |AD| : |AE| ⇒ 1 : cosA = |AD| : 1 ⇒ |AD|*cosA = 1 ⇒ |AD| = 1/cosA = secA ∴ |AD| = secA
삼각함수의 기하학적 의미
그림 1 그림 2
중요! 이 이미지는 각AEC가 직각이어야 성립한다.
(cosα와 sinα에 대한 증명은 생략한다.)
1_ 각β는 90º-각α이다. 그러므로 그림 1의 모든 삼각형이 닮음임을 확인할 수 있다.
2_ 새로 구해야하는 4각(tanα, cscα, secα, cotα) 중
tanα와 cscα는 파란삼각형(CFE)과 초록삼각형(AEC)이 닮음임을 이용하고,
cotα와 secα는 파란삼각형(CFE)과 노란삼각형(CEB)이 닮음임을 이용한다.
|AE| : |CE| = |CF| : |EF| ⇒ |AE| : 1 = cosα : sinα ⇒ |AE| = cosα / sinα = tanα ∴ |AE| = tanα
|AC| : |CE| = |CE| : |EF| ⇒ |AC| : 1 = 1 : sinα ⇒ |AC| = 1 / sinα = cscα ∴ |AC| = cscα
|BE| : |CE| = |CF| : |EF| ⇒ |BE| : 1 = sinα : cosα ⇒ |BE| = sinα / cosα = cotα ∴ |BE| = cotα
|CB| : |CE| = |CE| : |CF| ⇒ |CB| : 1 = 1 : cosα ⇒ |CB| = 1 / sinα = secα ∴ |CB| = secα
2사분면 sin : + cos : - tan : - |
1사분면 sin : + cos : + tan : + |
3사분면 sin : - cos : - tan : + |
4사분면 sin : - cos : + tan : - |
특수각의 삼각함수 값
A(degree) |
0 |
30 |
45 |
60 |
90 |
120(180-60) |
135(180-45) |
150(180-30) |
180 |
270 |
360 |
sinA |
0 |
0.5 |
0.7071 |
0.8660 |
1 |
0.8660 |
0.7071 |
0.5 |
0 |
-1 |
0 |
cosA |
1 |
0.8660 |
0.7071 |
0.5 |
0 |
-0.5 |
-0.7071 |
-0.8660 |
-1 |
0 |
1 |
tanA |
0 |
0.5774 |
1 |
1.7321 |
X |
-1.7321 |
-1 |
-0.5774 |
0 |
X |
0 |
# 프로그래밍을 할 때는 결국 근사값을 넘겨줘야 하므로 자주 쓰는 값을 참조테이블이나 매크로로 지정해서 저장해두는 것이 빠르게 처리된다.
삼각함수의 역함수
# 각을 가지고 값을 구하는 것이 아니라 값을 가지고 각을 구해야할 때는 삼각함수의 역함수를 사용해야 한다.
삼각함수 |
역함수 명칭 |
정의역 |
C++함수 |
sin |
arcsin |
-1 ~ +1 |
asin(x) |
cos |
arccos |
-1 ~ +1 |
acos(x) |
tan |
arctan |
모든 실수 |
atan(x), atan2(x,y) |
# atan(x) 함수는 어느 사분면의 각도인지 정확히 판단할 수 없으므로 주로 atan2(x,y)를 사용한다.