[게임수학] 삼각함수

Jaeyoung Ko·2025년 1월 7일

게임 프로그래밍에서 여러 가지 연산을 위해서 이산 수학 지식들은 필수불가분하다.

다양한 알고리즘, 벡터 등등도 있지만 이번 시간은 삼각함수에 대해 간단히 짚어보고자 한다.


삼각함수

빗변, 밑변, 높이로 이루어진 직각삼각형을 가정하고,
세 변 중 두 변에 대해 변에 대한 비율의 값을 통해 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 도 존재한다.

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글