Вычисление площади простого нерегулярного многоугольника тривиально. Однако рассмотрим самопересекающийся многоугольник ABCDEF, показанный слева внизу:
Если мы используем связанную формулу выше, пересекая точки в порядке полигона, мы получаем область 0. (Область "по часовой стрелке" отменяет область "против часовой стрелки".)
Однако, если мы сортируем точки радиально вокруг центра и вычисляем площадь, мы получаем неправильную область многоугольника ABEDCF справа.
Как лучше всего найти видимую область самопересекающегося многоугольника? (Если для ответа требуется создание phantom точек для каждого пересечения, пожалуйста, предоставьте подробную информацию о том, как лучше всего найти перекрестки и как затем пройти их в правильном порядке.)
Этот вопрос возник при исследовании краевых случаев для моего решения этого вопроса.
Определение области
Я определяю 'area' как количество пикселей, видимых при заполнении многоугольника, используя либо "ненулевые", либо "четные" правила. Я отвечу на любой из них, хотя оба будут лучше. Обратите внимание, что я явно не определяю область для самопересечения для подсчета перекрывающей области дважды.