Я работаю над игрой, в которой вы размещаете здания, соединенные разъемами на прямоугольной сетке. Ничто не может перекрываться. Здания и соединители не могут меняться, когда они находятся в сетке; они могут быть уничтожены в любое время. Сетка определяется так, что нижний левый угол равен (0,0).Проверка на перекрытие размещения на большой сетке
Здания представляют собой прямоугольники, каждая из которых может иметь длину 1 - 4 единицы; есть также 5x5 квадратов.
Соединители имеют начальную точку и конечную точку. Они не могут перекрываться и имеют ширину 1 единицу. Они могут идти по прямым линиям EDIT: (влево, вправо, вверх и вниз) и сгибаться везде на 90 градусов. Неограниченная длина.
Сетка в идеале должна быть довольно большой (200x200 или выше), но это означает, что может быть много тысяч этих объектов и разъемов.
Когда объект строится, мне нужно проверить, не перекрывает ли он что-либо. Если я создам сетку битов, размер ее будет непомерно большим, чем 300x300. Если я создам список всех объектов, я мог бы найти в каком-то пределе, но как я буду разбираться с коннекторами?
Невозможно видеть в виде двумерного массива битов, я должен индексировать все здания и сортировать их по координатам x, а затем по координатам y. Я мог бы выполнять линейный поиск разъемов, но это было бы очень утомительно и мучительно.
Есть ли у кого-нибудь предложение? P.S. Я делаю это в C++
90kbits не такой большой. Каковы ограничения вашей целевой платформы? Вероятно, вам стоит взглянуть на квадранты. Соединители могут быть представлены в виде ряда прямоугольников 1xN. –
Наверное, я застрял в колею, пытаясь оптимизировать память над головой. Теперь, когда вы упомянули об этом, я мог бы использовать бит массива. (Так как мне нравится думать о крайности) Теоретически сетка 1000x1000 лучше всего представляла бы массив или обнаруживала бы столкновения объектов? Кстати, как бы помочь Quadtree? – ithenoob
Квадраты должны делать такие запросы, как «эта новая форма пересекает любую существующую форму». Должен быть лучше, чем исчерпывающий линейный поиск. –