Ром, а как ты проверяешь, если луч пересекается с вершиной? Это ведь может быть случай и пересечения с контуром, и непересечения - в зависимости от того, острый угол или нет...
Да, по существу задачи - может, проще ручками натыкать локаций, и потом просто из массива координаты выбирать? А то попадет моб куда-нибудь на вершину блока - выковыривай его потом...
)
И по поводу Зевсового алгоритма...
На самом деле надо просто не через суммирование углов считать, а через суммирование синус-косинусов. По сути получится сложная сумма разниц координат... вполне целочисленно.
Хотя я бы считал через расчет попадания точки в отрезок :
Сначала нормируем все отрезки - то есть приводим их к виду Xн<Xк меняя концы.
Потом фильтруем по X на попадание точки в полосу отрезка.
Потом по Y - на попадание в прямоугольную область с диагональю отрезка.
Потом рассматриваем один из двух случаев - когда Yк < Yн и наоборот. Если отрезок горизонтальный - то переходим к случаю пересечения с вершиной. если нет - то смотрим, с какой стороны от прямой находится точка...
Далее, надо рассматривать соседние отрезки. Если от концов отрезка соседние отрезки идут в разные стороны по вертикали - то засчитываем пересечение. Если нет - то не засчитываем - луч только 'чиркает' по фигуре и ее не пересекает...