Всех приветствую. Возник такой вопрос, который наполовину связан с игрой и наполовину с программированием. В ходе разработки функций отрисовки нестандартных форм для областей (круги), возникла проблема: нужен алгоритм для размещения клеток-квадратов по точкам с координатами (это все будущие ячейки регионов, которые в сумме дадут круг). Нашел алгоритм Брезенхэма, который помог отрисовать окружности, но этого недостаточно, так как нужно круг затушевать. Как это реализовать?
P.S.: на скриншоте привожу пример, как в игре будут располагаться ячейки региона (отрисованы круги с радиусами 1 и 2 в точке (0;0), при наложении остаются пробелы; смещение координат там не учитывалось (при добавлении ячейки региона в точке образуется она выше и правее от указанной точки со стороной 32).

Принятый ответ

Я бы определял принадлежность центров квадрата некой окружности. Не так интуитивно-однозначно как проверка принадлежности всех точек квадрата окружности, но гораздо удобнее с точки зрения реализации. Далее для каждой строки поочередно прогоняем алгоритм заливки(в случае, если заливка подразумевает заливку текстурой почвы - стоит учитывать что каждый квадрат почвы имеет размеры 32/32 и центры мелких квадратиков имеют смещение в 16.), закрашивая почву в пределах новоопределенных ректов. Поочередно построчно, т.к. возможно у вас возникнет ситуация черное-белое-черное-белое и вторая строка (если весь массив прогонять подряд, а не построчно) начнется с черного квадрата. Не вижу каких-либо вытекающих неудобств при разработке..
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
28
6 лет назад
0
Пушистый, тогда заливка
ссылку скинул
0
13
6 лет назад
0
Есть идея сделать такую заливку круга через квадрат (проходиться циклом по ширине с шагом в ширину маленького квадрата, т. е. 32). Этот цикл сделать как составляющую цикла по высоте. Сама основа цикла - сравнение расстояний к центру окружности (если оно больше, чем радиус, точку удалять как основу для пикселя-ячейки региона и ее там не создавать). Вариант громоздкий + не известно, что из этого получится. Может, найдется алгоритм попроще.
0
20
6 лет назад
0
Перечитывал-перечитывал, но так и не понял что вы хотите получить в игре и с какими проблемами вы столкнулись. Возможно всё описанное логично, но, имхо, оно требует переформулировки.
0
13
6 лет назад
0
Diaboliko, возможно. Попробую иначе. Если изложить суть попроще: представим координатную плоскость (x,y). Нужен алгоритм отрисовки пиксельного круга на данной плоскости (в игре пикселями будут ячейки региона - cell'ы).
2
20
6 лет назад
2
Пушистый, чем вас не устраивает формула окружности?
2
20
6 лет назад
2
Я бы определял принадлежность центров квадрата некой окружности. Не так интуитивно-однозначно как проверка принадлежности всех точек квадрата окружности, но гораздо удобнее с точки зрения реализации. Далее для каждой строки поочередно прогоняем алгоритм заливки(в случае, если заливка подразумевает заливку текстурой почвы - стоит учитывать что каждый квадрат почвы имеет размеры 32/32 и центры мелких квадратиков имеют смещение в 16.), закрашивая почву в пределах новоопределенных ректов. Поочередно построчно, т.к. возможно у вас возникнет ситуация черное-белое-черное-белое и вторая строка (если весь массив прогонять подряд, а не построчно) начнется с черного квадрата. Не вижу каких-либо вытекающих неудобств при разработке..
Принятый ответ
0
13
6 лет назад
Отредактирован Пушистый
0
Diaboliko, просто когда вчера нашел алгоритм самого контура подумал, что наверное уже был изобретен костыль для всей фигуры)
DemonoiD, которая (x-a)^2+(y-b)^2=R^2? Да, это даже лучше, чем проверять расстояния.
По тестам получилось нечто похожее на круг (этот регион был сложен из кусочков - маленьких ячеек). Благодаря регистрации входа/выхода удалось зафиксировать результат. Нужно посмотреть, что произойдет с большими окружностями (пока что делюсь первыми результатами).
Круг с бОльшими размерами. Чем больше размер, тем точнее получается фигура. Замысел воплотить удалось, всем спасибо за помощь.
Загруженные файлы
0
20
6 лет назад
0
Пушистый, давай, удачи. В следующий раз, прежде чем морочить голову старикам с хгм, гугли матан :)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.