Я не использовал бы QuadTrees или что-либо, что усложнило, потому что Вы будете постоянно балансировать и восстанавливать равновесие деревьев, когда шары перемещаются между ними. Вероятно, было бы более эффективно только иметь сетку - каждый раз, когда Вы перемещаете шар, можно просто вычислить, в какой ячейке сетки это находится, и бросьте его там, если это изменяется. И каждый раз, когда необходимо осуществить проверку коллизии, можно просто проверить шары, центр которых или в сетке, или в смежных, если Вы достаточно близко к краю.
можно экспериментировать с размером сетки для нахождения оптимума. Можно найти, что это зависит от того, сколько шаров Вы имеете.
я сказал это в комментарии ниже, но я думаю, что он имеет право быть частью ответа: Только сделайте collsion обнаружение, когда что-то перемещается, таким образом, только необходимо проверить движущуюся вещь по вещам в ее квадрате сетки (и ajacent, как упомянуто выше). Тот путь, если Вы получаете груду вещей в нижней части, которые не перемещаются, довольно скоро те объекты, никогда не проверяется на коллизию, потому что ничто не перемещается в их сетке, и при этом что-либо не перемещается в или из их сетки.
Пространственное хеширование. См. страница Hugo Elias об этом .
Я второй метод Сетки. 2D моделирование шаров не извлечет выгоду из QuadTrees (которые обычно используются, когда у Вас есть сложная геометрия как символы и здания), или BSPs (который необходимо выбрать, если у Вас есть очень неравномерная дисперсия/концентрация объектов, как с областями высокой концентрации и низкими областями концентрации, в многопользовательской или стратегической игре)