Во время работы над проектом действительно только для удовольствия я столкнулся с некоторыми проблемами.Как вы могли бы представить алгоритм обнаружения столкновений между разными объектами?
Существует 2D мир, населенный круглыми шарами, заостренными треугольниками и тощими линиями (и, возможно, другой дикой природой). Все они являются подклассами WorldCreatures. Они могут двигаться в этом мире. Когда они встречаются друг с другом, происходит Столкновение.
Я хотел бы сделать способ обнаружения столкновений между ними. Вот что я сейчас нахожу сейчас:
- Для меня Ball Ball просто, я просто рассчитываю их расстояние от своих позиций и сравниваю его с суммой их «размеров».
- Столкновение между мячом и краем мира тоже просто - я просто проверяю расстояние от него, которое в декартовых координатах прост.
- Более общие проблемы - как обнаружить столкновение между Линией (начало и конец в некоторых точках) или другие объекты, которые я мог бы там есть? Расстояние между линией и точкой может быть легко вычислено тоже, но то, что я хотел бы, чтобы иметь
своего рода общего способа сказать, если объект A
сталкивается с объектом B
. Код, как это теперь выглядит как:
class WorldCreature:
def detectCollision(self, otherObject):
# do something
if collision:
self.onCollision(otherObject)
otherObject.onCollision(self)
class Ball(WorldCreature):
# someing here
class Line(WorldCreature):
# someing here
Теперь Механизм обнаружения столкновений должно зависеть от того, какие объекты могут столкнуться. Так будет эффект.
Должен ли я просто хранить список всех объектов в памяти и прокручивать все их в каждый шаг? Или, есть ли лучший способ улучшить производительность этой задачи?
+1 для квадрадерева. Другой вопрос: хотите ли вы обнаружить фактическое столкновение или просто пересечение. Фактическое столкновение потребует, чтобы вы развернули свои фигуры. – BigSandwich