Используя линейный алгоритм Брезенхэма или аналогичный, чтобы заполнить прямоугольник

Я хотел бы создать заполненный прямоугольник из четырех точек, используя линейный алгоритм Брезенхэма или аналогичный, чтобы получить гладкие стороны. Я наткнулся на этот ответ о переполнении стека [ссылка], который идеально подходит для создания линии между двумя точками. Как я могу использовать / изменить эту функцию, чтобы создать заполненный прямоугольник? Есть ли другой алгоритм, который мог бы лучше соответствовать моим потребностям?

1 ответ

Для произвольно повернутых прямоугольников:

Примечание: это описание следует за реализацией вики Ву с циклом for вдоль оси OX, но более эффективно рисовать края вдоль оси OY и заполнять горизонтальные линии.

Сортировка вершин по X-координате
Сделайте интервалы по горизонтальной оси, разделенной вершинкой
Для каждого интервала выберите верхний и нижний край
Одновременно выполните сглаживающий рисунок У для верхнего и нижнего края

Для верхнего края нарисуйте верхний полупрозрачный пиксель

   draw: plot(ipart(intery)  , x, rfpart(intery))

и игнорировать нижний пиксель, использовать его положение в качестве начала линии заливки

   LineFrom(ipart(intery)+1, x)

Для нижнего края нарисуйте нижний полупрозрачный пиксель и используйте верхний как конец линии заливки.

Повторно инициализируйте рисунок края, когда угол достигнут.

Другие вопросы по тегам