В моей wip-игре мне нужно реализовать столкновения Circle-Circle. Чтобы реализовать это, я просто вычислил квадратное расстояние между их центрами (x1-x2)² + (y1-y2)²
. Если это меньше, то их квадратные радиусы (r1+r2)²
произошло столкновение. Но сегодня я видел эту ссылку: Circle-Circle collisionПочему я должен использовать AABB для столкновения Circle-Circle
Здесь они сначала используют столкновение AABB, чтобы заметить, находятся ли круги рядом. Но зачем мне это делать? Столкновение с круглым кругом представляет собой простой и не очень дорогостоящий расчет. Когда я сначала использую AABB, я делаю по крайней мере такое же количество вычислений, и если круги еще больше.
Поясню:
я сделать обнаружение столкновений AABB для каждого круга с любой другой. Так что я должен сделать n!/(n-2)!
расчетов. n = количество кругов для проверки. Для каждой встречной пары AABB i затем необходимо выполнить другой расчет, если они действительно сталкиваются.
Без обнаружения столкновения AABB я делаю только вычисления n!/(n-2)!
, и я не думаю, что эти вычисления являются настолько дорогостоящими. Как вы думаете?
Как правило, только несколько кругов действительно близко друг к другу. Итак, да, вам понадобятся «n (n-1)» проверки AABB (см. Это 'n!/(N-2)! = N (n-1)'?), Но обычно это всего лишь несколько проверок столкновения. Скажем, AABB является лишь фактором 2 дешевле (это, вероятно, больше), то это ускорение для небольшого 'n' уже. –
Оглядываясь назад, глядя на ссылку, которую вы предоставили, я думаю, что вы действительно правы, что сравнение квадратов не дороже сравнения AABB. У вас будет только ускорение, если вы проверите AABB вместо вычисления квадратных корней, потому что это требует много времени.Я думаю, что ваш метод прекрасен без проверки AABB (может быть еще быстрее: 6 add/subtract + 3 multiply + 1 compare vs 8 add + 4 compare; зависит от вашего компилятора + оборудования, что будет лучше, я бы назвал его галстуком ;-)). –
Итак, AABB полезен, если ваш жесткий диск и/или компилятор быстрее с дополнениями, а затем с умножениями? И если вы используете квадратные корни, которые вам не нужны для кругового столкновения (но многие люди используют их: P). Спасибо за этот быстрый ответ. Можете ли вы опубликовать его в качестве ответа, чтобы я мог отметить его как решение и проголосовать за вас? Спасибо – Springrbua