Рисование пиксельного круга заданной области

У меня есть некоторая область X на Y пикселей, и мне нужно заполнить ее попиксельно. Проблема в том, что в любой момент нарисованная фигура должна быть максимально круглой.

Я думаю, что этот алгоритм является подмножеством упорядоченного дизеринга при преобразовании изображений в градациях серого в однобитные, но я не смог найти ссылок и не смог разобраться сам.

Я знаю о круге Брезенхэма, но он используется для рисования круга определенного радиуса, а не площади.

Я создал анимацию всех процентов заполнения для сетки 10 на 10 пикселей. Поскольку полная площадь составляет 10x10 = 100 пикселей, каждый кадр составляет ровно 1% вкл.

пиксельная анимация


person Alexii    schedule 28.05.2019    source источник
comment
Возможный дубликат концентрических кругов Брезенхема, оставляющих пустые пиксели   -  person Adder    schedule 28.05.2019
comment
Таким образом, грубо говоря, результатом будет прямоугольная область, заполненная диском увеличивающегося размера с центром в середине области?   -  person Toady    schedule 28.05.2019
comment
Нужно ли начинать с центра? Можете ли вы показать, что вы считаете самым круглым заполнением, если, скажем, X = 3Y, а площадь заполнена на 25%, 50% и 90%, пожалуйста?   -  person Mark Setchell    schedule 28.05.2019
comment
Что уже пробовали ВЫ? Где ты застрял?   -  person MrSmith42    schedule 28.05.2019
comment
Вероятно, самый простой способ — использовать алгоритм Дейкстры для поиска пикселей в порядке увеличения расстояния от центра.   -  person Matt Timmermans    schedule 28.05.2019
comment
Я не вижу, какое это имеет отношение к дизерингу.   -  person Yves Daoust    schedule 28.05.2019


Ответы (1)


Заполненный диск имеет уравнение

(X - Xc)² + (Y - Yc)² ≤ C.

Когда вы увеличиваете C, количество точек, удовлетворяющих уравнению, увеличивается, но из-за симметрии оно увеличивается скачками.

Чтобы получить желаемый эффект заполнения, вы можете вычислить (X - Xc)² + (Y - Yc)² для каждого пикселя, отсортировать по этому значению и позволить пикселям появляться один за другим (или за один раз, если вы знаете желаемое количество пикселей).

Разорвать связи можно разными способами:

  • сохраните исходный порядок, как при вычислении пикселей, используя стабильную сортировку;

  • перетасовывать ряды с одинаковыми значениями;

  • немного изменить координаты центра, чтобы не было связей.


Заполнение трюком с децентрированием.

Значения:

введите здесь описание изображения

Заказ:

введите здесь описание изображения

person Yves Daoust    schedule 28.05.2019
comment
Большое спасибо, это именно то, что я искал. - person Alexii; 29.05.2019