Пусть у вас есть центральные индексы cx, cy
Предварительно рассчитайте значения для начальных и конечных углов сектора:
S_Cos = Cos(Start)
S_Sin = Sin(Start)
E_Cos = Cos(End)
E_Sin = Sin(End)
И сделайте заливка с нулями, используя границуусловия:
(x-cx) * S_Sin - (y-cy) * S_Cos >= 0 //point is left to starting ray
(x-cx) * E_Sin - (y-cy) * E_Cos <= 0 //point is right to ending ray
x >= minx, y>=miny, x<=maxx, y<=maxy //coordinate is inside array
Прежний подход:
Для малых углов дуги (<90 градусов): </p>
Выберите направление заполнения - в большинстве случаев горизонтальная линия хорошавыбор, в то время как для некоторых направлений начала / конца вертикальное заполнение более удобно (например, 350 градусов - 10 градусов)
Выполните обход вдоль лучей от центра, используя алгоритм линии Брезенхема .Для каждого шага Y заполнить нулями горизонтальную линию между лучами или между лучом и границей прямоугольника (массива)
Для большей дуги - разделить дугу на несколько меньших по осям OX, OY.