Сначала я попробовал реализовать прямоугольное пересечение, которое хорошо работает. Однако, когда мне нужно применить физическую систему, такую как векторы скорости, ускорения и направления, мне нужно будет найти способ определить, какая сторона прямоугольников сталкивается. Теперь в моей системе нет повернутого прямоугольника, поэтому это упростило проблему. Однако я не мог найти простой способ определить, какая сторона прямоугольника столкнулась. Я уже однажды имел дело с этой проблемой, но с треском провалился.
В прошлом я определял расстояние между каждой параллельной прямоугольной стороной и проверял, близко ли это расстояние к 0 (используйте некоторый первоначально определенный диапазон расстояний) или равно 0. Однако для арифметики с плавающей точкой это оказывается нестабильным, поскольку неизвестного времени. Иногда прямоугольники фактически пересекаются друг с другом, прежде чем они достигнут определенного диапазона.
С другой стороны, я думал о создании нескольких прямоугольников, каждый прямоугольник для каждой стороны. Однако, подумав еще раз, это будет то же самое, что параллельная сторона с проверкой диапазона расстояний, просто этот диапазон расстояний является шириной каждого мини-прямоугольника.
Поэтому какое-либо предложение к этой проблеме?
источник
Ответы:
Адаптировано из моего ответа "Какая сторона была поражена?" :
Я предлагаю вычислить сумму Минковского для B и A, которая является новым прямоугольником, и проверить, где находится центр прямоугольника A относительно этого нового прямоугольника (чтобы узнать , происходит ли столкновение) и его диагоналей (чтобы узнать, где произошло столкновение). это происходит):
источник