728x90
반응형
역삼각함수
역삼각함수는 삼각함수의 역함수를 의미한다. 역삼각함수를 사용하는 이유는 바로 주어진 값에 따른 각도를 얻을수 있기 때문이다.


게임수학) Chapter1. 삼각함수
삼각형은 꽤나 오래전부터 연구되어온것중 하나이다. 게임에서도 이러한 삼각형의 성질을 이용해서 콘텐츠를 제작하는데, 그중에서 삼각함수에 대해 알아보려고 한다. 삼각함수 모든 삼각함수...
pjnull.tistory.com
역삼각함수와 내적/외적
역삼각함수에서 각도를 구할때 내적을 이용한다면 손쉽게 cos값을 얻을수 있다. 또한 외적을 이용한다면 역삼각함수가 닿지 않는 범위까지 보정이 가능하다.
게임에서 활용
그렇다면 게임에서는 역삼각함수를 어떻게 활용할수 있을까?

이러한 식으로 x축을 기준으로 cos은 수직적인 범위를 가지고 있으며, sin은 수평적인 범위를 가지게 된다. 이를 이용하여 피격의 범위(백어택)과 같은 로직을 구현하는 유용하게 사용할수 있다.
구현
Vector _lookPos = {};
Vector _lookDir = {};
Vector monsterTomouseDir=mousepos - _pos;
monsterTomouseDir.Normalize();
Vector dir = _lookDir;
dir.Normalize();
float dot1 = (monsterTomouseDir.Dot(dir));
float radian = acos(dot1);
float angle = radian * 180 / 3.14f;
wstring str = format(L"angle({0})",angle);
Utils::DrawText(hdc, { 20,50 }, str);


위 코드의 문제점은 arccos함수가 0~180º까지 밖에 판별을 하지못하므로 180도가 넘어가면 각도가 줄어들게 된다.
이러한 현상은 외적을 이용하고 보정을 해주면 쉽게 고칠수 있다.
float crossval=_lookDir.Cross(monsterTomouseDir);
if (crossval < 0)angle = 360 - angle;


백어택 적용
이를 통해 백어택과 같은 방향성 로직을 만들수있다.
if (angle < 240 && angle>120)
{
wstring str2 = format(L"BackAttack");
Utils::DrawText(hdc, { 20,80 }, str2);
}


728x90
반응형
'게임엔진 > 윈도우API' 카테고리의 다른 글
윈도우API)13.플립북 애니메이션 (0) | 2022.12.24 |
---|---|
윈도우API)12. 모작 (1) | 2022.12.23 |
윈도우API)10. 벡터의 외적 (0) | 2022.12.22 |
윈도우API)9. 벡터의 내적 (0) | 2022.12.22 |
윈도우API)8. 벡터 (0) | 2022.12.18 |
댓글