게임 프로그래밍에서 여러 가지 연산을 위해서 이산 수학 지식들은 필수불가분하다.
다양한 알고리즘, 벡터 등등도 있지만 이번 시간은 삼각함수에 대해 간단히 짚어보고자 한다.
빗변, 밑변, 높이로 이루어진 직각삼각형을 가정하고,
세 변 중 두 변에 대해 변에 대한 비율의 값을 통해 Trigonometric Ratio, 즉 삼각비
를 구한다.
(1) sinθ = 높이 / 빗변
(2) cosθ = 밑변 / 빗변
(3) tan𝜃 = sin𝜃 / cos𝜃 = 높이 / 밑변
#include <iostream>
#include <cmath>
// pi 값
#define M_PI 3.14159265358979323846
int main() {
// 각도와 라디안 변환
double degree = 45.0;
double radian = degree * (M_PI / 180.0);
// 삼각함수 계산
double sinValue = std::sin(radian);
double cosValue = std::cos(radian);
double tanValue = std::tan(radian);
// 출력
std::cout << "Degree: " << degree << " degrees\n";
std::cout << "Radian: " << radian << " radians\n";
std::cout << "sin(" << degree << "°): " << sinValue << "\n";
std::cout << "cos(" << degree << "°): " << cosValue << "\n";
std::cout << "tan(" << degree << "°): " << tanValue << "\n";
// 역삼각함수 계산
double arcsinValue = std::asin(sinValue) * (180.0 / M_PI);
double arccosValue = std::acos(cosValue) * (180.0 / M_PI);
double arctanValue = std::atan(tanValue) * (180.0 / M_PI);
std::cout << "arcsin(" << sinValue << "): " << arcsinValue << " degrees\n";
std::cout << "arccos(" << cosValue << "): " << arccosValue << " degrees\n";
std::cout << "arctan(" << tanValue << "): " << arctanValue << " degrees\n";
return 0;
}
삼각함수는 주기성
을 가지게 되는데, sin x와 cos x의 경우 2 pi, tan x의 경우 pi의 주기를 가진다.
컴퓨터 그래픽스에서,
2D/3D 회전 변환 및
조명, 음영 계산에 사용된다.
삼각비에 있어서 역연산으로, 위의 삼각함수는 각
에 대한 변의 길이 비율
인 점이었던 반면,
역삼각함수는 변의 길이 비율
로부터 각
을 찾아낸다.
arsin
arccos
arctan
이외에도 arccot, arcsec, arccsc 도 존재한다.