응애맘마조
221209 강의 본문
이틀 전 12월 7일에 적었던 0.0174532라는 숫자의 정체는 호도법에 관련된 숫자였습니다.
오늘은 호도법에 대해 강의를 들었습니다.
우리가 사회에서 그리고 일상생활에서 사용하는 각도는 디그리(degree) 각도입니다. 하지만 전에 과제 내용에 적었듯이 프로그래밍할 때는 라디안(radian)을 사용한다고 했었습니다. 그때 사용하는 방법이 호도법입니다.
호도법은 호의 길이로 각도를 나타내는 방법입니다. 밑변과 호의 길이가 같으면 1rad(1라디안)라고 합니다.
라디안은 길이와는 상관없이 비율만 같으면 똑같은 값이 나옵니다.
이 공식을 이용하면 구할 수 있는 각도가 있습니다.
360° = 2πrad입니다. (원의 둘레입니다.)
1° = π / 180rad입니다. 이 값이 0.0174532입니다.
(원래는 무한소수로 끝없이 나오지만 float 자료형을 사용하는 입장에서는 소수점 7자리까지 사용할 수 있기 때문에 이 값을 사용합니다. 오늘은 소수점 8번째 자리에서 반올림해서 0.0174533이 되었습니다.)
90° = π / 180 * 90입니다.
반대로 1rad = 180 / π입니다.
이 공식들은 알아두면 좋을 것 같습니다.
코드를 작성 할 때 MoveToEx와 LineTo에서는 각도에 라디안을 곱하고 세타(θ)를 더하는 방법으로 했는데 사실 θ를 먼저 더하고 라디안을 곱해도 아무런 문제는 없습니다. 하지만 그렇게 되면 회전을 시켰을 때 각도가 1도씩 돌아가는 게 아닌 θ값이 0.1씩 돌아가기 때문에 굉장히 느린 속도로 돌아가게 됩니다. 게임을 개발할 때 사람들은 정밀함보다 빠름을 요구하는 경우가 많기 때문에 이 방법으로 쓰는 게 틀리지는 않았지만 별로 안 좋아하는 경우도 많다고 합니다. 물론 어떤 부분을 개발하는지에 따라 쓰는 방법이 달라지긴 할 겁니다.
얘기가 길어졌지만 이 이후부터는 프레임워크(Framework) 객체화 인스턴싱을 하게 되었습니다.
그동안 만들었던 삼각형, 사각형, 원, 별 등등 이들의 공통점은 중점, 크기, 회전이 같다는 것이었습니다.
새로운 헤더파일과 inl(inline) 파일을 추가했습니다. 직접 작성하지는 않았고 강사님이 직접 만드신 파일입니다.
이 안에는 Vector2, Vector3, Vector4라는 이름의 구조 있습니다. 이 안에는 float 자료형의 매개변수가 있습니다.
Vector2 안에는 x, y가 있습니다.
Vector3 안에는 x, y, z가 있습니다.
Vector4 안에는 x, y, z, w가 있습니다.
이렇게 바뀌면서 코드 작성 방식도 바뀌었습니다.
중점에서 x, y값을 바꾸면서 선을 그렸던 방식에서
position은 중점, scale은 크기, rotation은 회전 값으로 앞으로도 사용하게 됩니다.
도형을 그리게 될 최상위 클래스에서 상속받아 각자 다른 도형을 그리게 되면서 가상함수를 사용하게 됩니다.
가상함수는 자식이 되는 클래스에서 재정의 할 것이라고 예상할 때 사용합니다.
Framework 헤더 파일에서 #define과 extern에 대해 많이 헷갈리게 될 수도 있는데
#define은 해당 파일 내부에서만 사용할 수 있는 링크이고
extern은 외부 파일에도 존재한다고 알려주는 정의된 함수입니다.
메인으로 실행되는 cpp 파일 안에 새롭게 WM_CREATE를 새로 작성하였습니다. 이 함수는 윈도우가 만들어질 때 딱 한 번만 호출되는 메시지입니다. 이때 호출되는 Vector2는 임시 변수로써 만들어진 후에는 삭제가 됩니다.
읽어주셔서 감사합니다.