*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
[ 사전 지식 ]
과정은 얼추 구했는데,
문제는 이거다.
코사인값은 180 Degree(PI Radian)를 기준으로 대칭 모양을 하고 있다.
Cos(179 Degree) = Cos(181 Degree)이다.
Cos(178 Degree) = Cos(182 Degree)이다.
그말인즉슨, Cos값이
179 Degree인지, 181 Degree인지,
90 Degree(0)인지 270 Degree(0)인지
구분을 못한다는 것이다.
-> ACos 값을 통해 구할 수 있는 최대 각도는 180 Degree라는 것이다.
만약 구하는 각도가 예를 들어 200 Degree면, ACos를 통해 얻는 각도는 160 Degree가 나올 것이다.
-> 그러므로 만약 180 Degree가 넘는 값을 구하게 되면, 360 Degree에서 빼 주어야 한다.
//Vector2.h
Angle()
- Vector2 구조체에서 Angle() 함수를 생성한다.
- 인자로 Vector2를 받아서, 각도를 구해 float 형태로 반환한다.
- 구현 과정은 위 이론 그대로
더보기
//Vector2.h 구조체의 메소드
float Angle(const Vector2& Vec)
{
//목표값과의 밑변과 높이를 구한다.
float width = Vec.x - x;
float height = Vec.y - y;
//피타고라스 정리를 통해 빗변의 길이를 구한다.
float c = sqrt(width * width + height * height);
//구한 길이로 코사인값을 구한다.
float theta = acosf(width / c);
//만약 구해야 하는 각도가 180 degree(PI) 를 넘어갈 시 360 degree(PI * 2)에서 빼준다.
if (height < 0.f)
theta = 2.f * PI - theta;
return theta;
}
- 파일 업로드와 실제 활용은 다음 글에서
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
24. 입력을 받아 총을 발사하는 플레이어 (0) | 2022.05.21 |
---|---|
23. 플레이어를 향해 총을 쏘는 몬스터 (0) | 2022.05.21 |
21. 총알 발사하기 / 목표물까지의 각도 구하기 (0) | 2022.05.20 |
20. (활용)몬스터 만들기 (0) | 2022.05.20 |
19. Input 입력 구조 설계 2 (0) | 2022.05.20 |