Это простой способ, который неэффективен, но вполне оправдан, когда вам не нужно ничего слишком сложного или у вас мало объектов.
В противном случае существует множество различных алгоритмов, но большинство из них довольно сложны для реализации.
Например, вы можете использовать подход split et impera , при котором объекты кластеризуются иерархически в соответствии с их расстоянием и вы даете каждому кластеру ограничивающий прямоугольник, содержащий все элементы кластера. Затем вы можете проверьте, какие кластеры сталкиваются, и избегайте проверки пар объектов, принадлежащих кластерам, которые не сталкиваются / не перекрываются.
В противном случае вы можете найти общий алгоритм разделения пространства, чтобы подобным образом разделить объекты, чтобы избежать бесполезных проверок. Эти алгоритмы разделяют обнаружение столкновений на две фазы: грубая , в которой вы видите, какие объекты могут сталкиваться, и штраф , в которой вы эффективно проверяете отдельные объекты.
Например, вы можете использовать QuadTree wikipedia , чтобы найти простое решение ..
Взгляните на википедию страница , она может дать вам несколько советов.