2016-04-25 6 views
0

Я читаю некоторые о QuadTrees и как я могу использовать их для лучшего обнаружения столкновений. Но я не понимаю, почему QuadTrees приносит мне большую производительность. Я пробую это на 2D-игре.Почему я должен использовать QuadTree с обнаружением столкновений

Если я использую QuadTree, я должен очистить каждый кадр QuadTree и вставить все мои объекты, а затем пропустить его, чтобы получить все возможные объекты столкновения. И затем пройдите через это, чтобы получить мой объект столкновения, в котором я нуждаюсь. Почему это лучше, чем цитировать все мои объекты? Для QuadTree мне нужно O (n logn), если im right. Но цикл через все мои объекты О (п)

Greetz

+0

Хотя это очень крутой и увлекательный вопрос, я не думаю, что это довольно тема для StackOverflow. У вас может быть больше удачи на http://gamedev.stackexchange.com/ И для краткого ответа QuadTrees может помочь ограничить количество объектов, которые вам нужны, чтобы проверить обнаружение конфликтов, тем самым повышая производительность. Обнаружение столкновений стоит дорого, если вам нужно проверить его на каждый отдельный объект сцены. http://www.mikechambers.com/blog/2011/03/21/javascript-quadtree-implementation/ –

ответ

0

Сравнивая каждый объект со всеми остальными О (п^2), потому что вы должны пройти через весь объект (O (п)), и для каждого объекта вам нужно проверить (почти) все остальные, так что это еще один O (n), в результате чего O (n^2).

Это хуже, чем O (n log n).

Сравнение каждого объекта с каждым другим может по-прежнему дешевле, если у вас есть только 5 объектов или так, потому что вы избегаете накладных расходов на создание квадранта.

Кроме того, вы можете повторно использовать квадри, если не все объекты меняют свои позиции.

+0

Так что, если мне нужно только проверить свой плеер на все объекты, работа без квадтри должна быть лучше? Спасибо вам – R3Tech

+0

Если перемещается только один объект, он даже не должен находиться в квадранте. Является ли квадрант лучше, зависит от количества объектов. Лучше всего попробовать. – TilmannZ