Arhn - архитектура программирования

Сложность обнаружения столкновений ‹O (n²): Более простой подход, чем сетка, квадродеревья, BSP?

У меня есть большое количество объектов (для начала, мячей), которые ступенчато движутся в пространстве по одному и не должны перекрываться. В настоящее время при каждом движении я проверяю столкновение с любым другим объектом. Несколько другое вопросы, чтобы решить эту проблему, здесь, однако я подумал о, казалось бы, простом решении, которое, кажется, не подходит в этом контексте, и мне интересно, почему.

Почему бы просто не сохранить 2 коллекции (для 2D или 3 в трех измерениях) всех объектов, отсортированных по координате x и y (и z) соответственно, и при каждом движении искать все другие объекты на заданном расстоянии (диаметр шара здесь) в каждом измерении и проверяет ли фактическое столкновение только объекты в обоих (или всех 3) наборах результатов?

Я понимаю, что это работает только для объектов одинакового размера, но в качестве альтернативы можно использовать вдвое больше коллекций, отсортированных по (1) самой высокой (2) самой низкой координате каждого объекта для каждого измерения. Любая причина, по которой это не сработает или даст значительно меньшее улучшение по сравнению с переходом от «парной проверки» O (n) к «метод сетки" или "quad / octrees"? Я рассматриваю обновление этих отсортированных коллекций как дорогостоящую операцию здесь, но используя, например, TreeSet (моя реализация будет на Java) он все равно должен быть значительно меньше O (n), верно?


Ответы:


1

Проверка того, какие объекты входят в оба набора результатов, включает просмотр всех объектов на двух полосах плоскости. Это гораздо большая область и, следовательно, включает в себя больше объектов, чем ограничивающий квадрат, который квадратное дерево позволяет вам сразу сузиться. Чем больше объектов, тем медленнее.

26.05.2011
  • О верно! Возможно, тот факт, что в Java-наборах уже есть удобные методы для пересечения множеств, не позволил мне считать это узким местом. Спасибо, что указали на это. 27.05.2011

  • 2

    Вы хотите использовать пространственный индекс или кривую заполнения пространства вместо квадродерева. Sfc уменьшает 2d сложность до 1d сложности и отличается от квадродерева, потому что он может хранить только 1 объект на пару x, y? Может это сработает для вашей проблемы? Вы хотите найти блог Ника по пространственному индексу дерева квадрантов с кривой Гильберта.

    26.05.2011
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..