컴퓨터 프로그래밍 공부

정리 230319

게임 개발 2023. 3. 19. 20:32

삼각함수란 삼각비 + 호도법 + 함수 이다.

 

삼각비는 직각삼각형 세 변의 길이의 비는 각에 대한 일정한 관계가 있다.

이러한 일정한 관계를 함수로 나타낸 것이 삼각함수이다.

 

삼각비에서는 직각삼각형에서 세 변의 길이의 비를 이용했다면

삼각함수에서는 좌표평면 위의 좌표를 이용하는 차이가 있다.

 

또 삼각비에서는 육십분법으로 나타낸 각을 이용했다면 삼각함수에서는 호도법으로 나타낸 각을 이용한다.

 

삼각함수의 뜻, 삼각함수의 정의

 

 

xy좌표평면에 반지름의 길이가 r인 원을 그리고 원 위의 임의의 점을 P라고 하면

x축 양의 방향을 시초선으로 동경하고 선분OP가 이루는 각을 세타θ라고 할 때,

y/r, x/r, y/x는 θ의 크기에 따라 한 가지로 정해진다.

 

r != 0 일 때, θ -> y/r , θ -> x/r , θ -> y/x 는 각각 θ에 대한 함수가 된다.

이 함수를 차례로 사인함수, 코사인함수, 탄젠트 함수라고 한다.

 

sinθ = y/r , cosθ = x/r , tanθ = y/x 로 나타낸다.

그리고 이 세가지를 묶어서 삼각함수라 한다.

 

 

역삼각함수

 

삼각함수는 각을 입력받아 그 각에 대한 삼각비의 값을 출력하는 함수이다.

그것에 대한 역함수, 곧 삼각함수의 값을 입력받아 그 값에 해당하는 각을 출력하는 함수를 생각할 수 있고,

그것을 역삼각함수라 한다.

 

    // 방향벡터 구하기
    Vector2 rotation_temp2 = INPUT->GetWorldMousePos() - player.GetWorldPos();
    // DirToRadian에 Normalize가 들어가있음.
    player.rotation = -Utility::DirToRadian(rotation_temp2);

 

 

a의 값을 구하려면 첫째로 마우스의 월드 위치와 플레이어의 월드 위치를 빼야한다.

이러한 코드는 다음과 같다.

 

    Vector2 rotation_temp2 = INPUT->GetWorldMousePos() - player.GetWorldPos();

 

Vector2를 사용하는 이유는 2D 좌표 평면에서 플레이어와 마우스의 좌표의 거리 a자체가 하나의 벡터이기 때문이다.

 

    // DirToRadian에 Normalize가 들어가있음.
    player.rotation = -Utility::DirToRadian(rotation_temp2);

Utility 단어 뜻 유용성 

 

float Utility::DirToRadian(Vector2 Dir)
{
    //만약 단위벡터가 아니라면
    Dir.Normalize();
    return atan2f(Dir.y, Dir.x);
}

 

atan2 함수는 다른 숫자로 나눈 숫자의 아크 탄젠트를 반환하는 삼각함수이다.

반환 값은 라디안 단위이며 PI/2 와 -PI/2 사이이다.

 

역삼각함수는 그 각을 알려주고

 

rotation 도 결국 라디안 각을 사용하니,

그 각도만큼 회전 각이 움직이는 것이다.

 

참고 사이트 주소

 

https://mathbang.net/498#gsc.tab=0 삼각함수

https://ko.wikipedia.org/wiki/Dir_(%EB%AA%85%EB%A0%B9%EC%96%B4) DIR