응애맘마조
230203 강의 본문
어제 잠깐 배웠던 A*을 했습니다. 어제일자 강의에서 말했던 대로 최소비용으로 찾아가는 방식이고 비용이 커지면 갱신을 하지 않는 특성입니다. 따로 PathFinding 함수를 만들어서 사용했습니다. (객체가 아니기 때문에 따로 클래스로 빼지 않았습니다. 또한 잘 다루지 않는 기능이기도 하고 강사님이 독자적으로 만들었기 때문에 코드는 공개하지 않겠습니다.)
공식은 F = G + H입니다.
G는 출발점으로부터 현재 위치까지 경로를 따라 이동하는 데 사용되는 비용입니다.
H는 현재 위치에서 도착점까지의 경로를 따라 이동하는 데 사용되는 비용입니다.
F는 G와 H의 합산입니다.
먼저 길을 찾았는지 아닌지 판단을 해야 되기 때문에 bool 값으로 사용하였습니다. 처음 시작할 때 타일맵 밖으로 이동하려고 하면 이동할 수 없게끔 해야 됩니다. 기존에 있던 길도 전부 비우고 출발지와 목적지가 같으면 false를 반환합니다. 그리고 이동 비용을 전부 초기화를 시킵니다.
우선순위 큐를 사용해서 리스트를 만듭니다. 출발점과 도착점과 예상비용을 만듭니다. 그 후 주위의 8칸의 인접된 타일의 비용을 검사하고 상하좌우 타일 비용검사를 합니다. 벽이 아니라면 현재 가지고 있는 비용이 G보다 크다면 비용을 갱신합니다. 도착점까지 왔다면 true를 반환하고 종료합니다.
선형보간법에 대해서 알아봤습니다. 대각선의 이동이 없이 수직과 수평으로만 이동을 하는데 출발점과 도착점이 있고 그 사이에 점이 하나 있을 때 그 위치를 알아내는 법입니다. 정가운데면 절반값으로 할 수 있지만 만약 임의로 지정된 좌표라면 이 선형보간법으로 알 수 있습니다. 공식은 구할좌표.x = 현재좌표.x * G + 도착좌표.x * (1 - G)입니다.
SAL 주석에 대해서도 잠깐 했었습니다. #define으로 값을 정하지 않고 이름만 정해줍니다.
이번 강의는 꽤 어렵습니다. 다루지 않는 곳도 있다고 하네요.
읽어주셔서 감사합니다.