Пересечение нескольких окружностей
Всем привет!
Разрабатываю для проекта логику перемещения мобов на сервере. Уже несколько дней пытаюсь реализовать, что бы запретить на 2D плоскости пересекаться окружностям, которые постоянно меняют свои координаты. Примечание: - Все окружности имеют одинаковый размер. - Каждая окружности имеет одинаковую логику и алгоритм. Суть алгоритма: 1) Функция получает новые координаты окружности X, Y. 2) Проверяет циклом дистанцию от данной окружности ко всем остальным. 3) Если дистанция от центра окружностей меньше, диаметра окружности - значит окружности пересекаются. 4) После, делаем что то типа "экстрополяции" удлиняя вектор и меняя положения нашей окружности. На данный момент я реализовал только это, ибо дальше, когда на пути окружности уже хотя бы 2 - все катится к чертям( Реализовал несколько вариантов для проверки на пересечения с 2-мя окружностями, но получилось все очень примитивно. Конечно можно попробовать реализовывать циклическим перебором всего всего... Но хочется сделать все максимально оптимизировано, ибо в данном случае каждая ms на кану. Было ![]() Стало ![]() Посоветуйте литературу, или же примеры реализации, алгоритм.. Очень жду Ваших мыслей! Заранее спасибо! PS: Необходимо реализовать отталкивание именно текущей окружности. То есть вариант, что бы оттолкнуть окружности вокруг в разные стороны не подходит. Положение вокруглежащих окружностей должно оставаться неизменно |
Dorian_bs,
:write: массив координат -- изначально никто непересекается -- при добавлении или перемещении это проверяем -- при проверке любой ячейки делаем генерируем приращение -- проверяем на условие - false снова генерация и проверка -- true проверяем следущую. |
Цитата:
Есть идеи, как реализовать без циклов (кроме общего, что поочередно обходит все окружности) |
Часовой пояс GMT +3, время: 11:35. |