Battle-Of-Two-K, я бы сделал иголку единичной длины и бесконечно тонкой. Считал бы координаты концов иглы как float. Число пересечений будет как разница целых частей от координат x концов иглы. А для отображения просто бы масштабировал и рисовал картинку. Еще хорошо бы учесть влияние конечной ширины стола с линиями.
o5a, совершенно верно, для других систем счисления будут свои множители, предлагаю их вам найти. А также подсчитать числа заканчивающиеся на ноль (аналог для десятичной системы 10-1 ноль, 20 -1 ноль 100-2 нуля, 110 - 1 ноль, 1000 -3 нуля и т.д.)
Да, в IM есть функция trim, которая делает автообрезку, но может выдавать координаты пустых полей.
А вообще, по идее, надо делать эрозию исходной картинки (+границы правая и нижняя) с надписью, как структурным элементом. Далее добавлять надпись в то место, где останутся белые пиксели. Вобщем задача легко решается мат. морфологией, без ИИ. :-)
Ищете векторное произведение двух соседних ребер полигона. Получаете нормаль. Затем эту нормаль скалярно умножаете на вектор (из начала координат) общей вершины этих двух ребер. Если скалярное произведение больше нуля, то все ок, если меньше - то инвертируйте нормаль.