Как насчет алгоритма Брезенхема Line?После некоторой настройки, это чистая целочисленная математика, и ее можно адаптировать для рисования многоугольника простой итерацией начальных точек по краям многоугольника.
комментарии:
Я попытаюсь нарисовать этов ASCII, но это, вероятно, будет выглядеть грубо.Брезенхэма можно использовать для рисования заполненного многоугольника, выбирая начальный край и итеративно перемещая линию брезенхама по холсту параллельно этой точке.
Допустим, у вас есть несколько таких точек:
*(1)
*(3)
*(2)
*(4)
Они пронумерованы в порядке сортировки слева-справа, поэтому вы выбираете крайнюю левую начальную точку (1) и решаете, хотите ли вы идти вертикально (начало 1,2) или горизонтально (1,3).Это, вероятно, будет зависеть от того, как ваш DSP будет отображаться, но давайте вернемся к вертикали.
Итак ... Вы используете линию 1-2 в качестве начальной строки bresenham.Вы вычисляете начальные точки линий заполнения, используя строки 1-3 и 2-4 в качестве начальных / конечных точек.Начните расчет брезенхэма для каждого и нарисуйте еще один брезенхем между этими двумя точками.Вроде как:
1.1 -> 2.1, then 1.2 -> 2.2, then 1.3 -> 2.3
и т. Д. ... пока не дойдете до конца любой из этих линий.В этом случае это будет, когда нижняя начальная точка достигнет (4).В этот момент вы начинаете итерацию вверх по линии 4,3, пока не достигнете точки 3 с обеими начальными точками, и все готово.
*-------
\\\\\\\\ *
\\\\\\\\
*-----\\
------- *
Где тире - это начальные точки, которые вы рассчитали вдоль 1-3 и 2-4, а косые черты - это линии заливки.
Конечно, это работает, только если точки правильно отсортированы, и у вас выпуклый многоугольник.Если он вогнутый, вам следует быть очень осторожным, чтобы не допустить пересечения линий заливки через границу, или выполнить некоторую предварительную обработку и разделить исходный полигон на два или более выпуклых.