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

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

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