Вот графическое изображение проблемы: http://i.imgur.com/aBG3p.jpg
Имея начальную точку (x1,y1) и конечную точку (x2,y2), я должен определить, открыт ли путь между двумя точками или, если он не открыт, по какой координате происходит столкновение.
Это была бы тривиальная проблема, если бы не специальные правила:
Линия может пересекать точку, называть ее (i,j) в малой и разной степени, не вызывая столкновения. Если (i,j) непосредственно примыкает к (x1,y1), мы можем безопасно срезать примерно 0,4 по его углам, не вызывая столкновения. Однако мы не можем срезать 0,4, если проходим прямо через него, только по углам. Это число сужается примерно до 0,2 по мере удаления от (x, y). К сожалению, я просто пытаюсь реконструировать то, что видел однажды, поэтому не знаю точных значений, я лишь приблизительно их оцениваю.
Предостережение к 1: если пространство непосредственно рядом с (i,j) в плоскости, которую мы пересекаем, на той стороне, которую мы пересекаем, также занято, столкновение произойдет несмотря ни на что. Столкновение произойдет (i,j), если мы перехватим его слишком сильно, иначе в соответствующем соседнем тайле.
Я предпринял несколько попыток решить эту проблему, но всегда заканчивал ложными отрицательными результатами и/или столкновением, возникающим на неправильной плитке. Я пытался сделать это без учета угла, просто глядя на десятичные точки x и y, когда мы движемся по линии. Я не уверен, возможно ли это сделать, или я должен каким-то образом использовать угол, или может ли использование угла каким-то образом облегчить мою жизнь.
Пожалуйста, помоги, если можешь!