Python. Вроде странный зверь для меня 8)
У меня есть опыт создания игр на c ++, поэтому я говорю с этой точки зрения.
Прежде всего (вы можете пропустить это, если у вас мало объектов), вам нужно обнаружение столкновений с широкой фазой. Уже упомянутое quadtree - только одна возможная реализация.
Широкая фаза необходима для поиска пар возможных сталкивающихся объектов.
Затем идет узкая фаза - когда проверяются пары.
Я использовал следующую схему (обратите внимание - она была создана с учетом примитивов, если вам нужны столкновения многогранников - просто используйте GJK и сферы, плюс лучи, сегменты):
Все, что нуждается в коллизиях, имеет CollisionObject, который обрабатывает преобразование и хранит CollisionPrimitive (прямоугольник, сфера и т. Д.)
Каждый CollisionPrimitive имеет type_id - когда вы пишете A_B_CheckIntersection - первый объект всегда имеет более низкий type_id
Для каждой пары в списке, которую вы получаете из широкой фазы - вы меняете объекты при необходимости и индексируете массив, в котором хранятся указатели на определенные функции столкновения.
Конечно - для этого у вас должны быть идентичные интерфейсы (c ++), но это легко 8)
Что касается конкретных процедур столкновения: посетите http://realtimerendering.com/intersections.html
Это хорошее место для начала