Для надежного выполнения "четно-нечетного правила"
См. Эффективное заполнение полигона Дарелом Рексом Финли или версия Blender .
Это нечетный / четный метод заполнения, который поддерживает самопересекающиеся линии, не требуя сложного кода для обнаружения таких ситуаций, и не зависит от намотки (многоугольник можно перевернуть и дать те же результаты) .
Обновление, я сделал оптимизированную версию метода Дарела Рекса, который позволяет избежать зацикливания по всем координатам для каждого y-пикселя.
Автономные реализации:
Хотя ускорение, скорее всего, будет экспоненциальным, из быстрого теста оно примерно в 7,5 раз быстрее (в 11 раз при удалении вызова round
) с использованием произвольной рисованной каракулей в области 2540x1600, YMMV.