Как рассчитать точку и время пересечения 2 объектов?
Есть 2 объекта на карте. один движется слева на право, второй сверху вниз. Известна скорость и время начала пути.
1. Как узнать, пересекутся ли два объекта?
2. Как узнать время и место пересечения?
3. Тоже самое, но на карте. один из мск в екб, другой из питера в челябинск. Где и когда пересекутся?
Интересует вектор поиска ответа на вопрос. Не знаю даже куда копать. 3 вопрос подозреваю можно решить, зная сумму сегментов пути, потому по сути получится частным случаем первых двух вопросов.
Перекладывать на фронтенд не получится. Рассчеты должны на сервере.
Максим Гречушников: Тогда для предотвращения столкновения недостаточно данных, так как чтобы рассчитать среднюю скорость нужно знать скорость на каждом участке пути, а для этого машина должна пройти весь этот путь. Проще разбудить Вангу.
Вариант в лоб, но без 3 пункта.
У вас есть точка старта и вектор направления. Исходя из этого вы строите прямую, проходящую через точку старта и совпадающцю (не уверен в термине) с вектором. Получаете естественно уравнение прямой. То же делаете для второй точки. Далее находите точку пересечения этих двух прямых (это легко, зная их уравнения). Отлично, точка пересечения есть. И она единственная (если существует - прямые могут быть параллельны). Далее считаете расстояние из первой точки в точку пересечения, и из второй в точку пересечения. Берете скорости объектов (они должны быть известны - иначе нерешаемо), и считаете сколько каждому потребуется для преодоления пути из стартовой точки в точку пересечения. Если время совпало - пересекутся.
Максим Гречушников В принципе с маршрутом на карте по идее то же самое, кроме поиска точки пересечения. А ее поиск зависит от представления дорог - какую структуру вы будете использовать.
Написано
Saboteur
@saboteur_kiev Куратор тега Разработка игр
Отличная задача для школьников, которые не хотят учить математику, а хотят сразу зарабатывать сотни денег в геймдеве.
Т.к. в тегах игра для примера оттолкнемся от апдейтов.
Предположим что у вас игровая логика апдейтится 60 раз в секунду.
Мы знаем стартовые точки, направление и ускорение у обоих точек ("А" и "В").
Предположим что движения вы тоже апдейтите вместе с логигой 60 раз в секунду(просто такое обычно вяжут по своему и может быть не 60 а меньше или наоборот больше).
Зная все вышеперечисленное делаете все по шагам опять же для примера и понимания:
1) Найти абстрактно точку пересечения без учета времени "С". Если такой точки не существует значит остальные пункты пропускаем.
2) Самым обычным циклом произвести вычет сколько времени потребуется точке "А" для достижения точки пересечения "С" с учетом скорости и направления.
3) Повторить пункт (2) для точки "В".
4) Сравнить результаты полученные на шаге (2) и (3) и если они равны значит точки пересекутся.
простите, я не указал, что еще и серверная веб разработка. апдейт рассматривался раз в минуту. т.е. рассчеты мне нужно производить уже при "запуске движения транспорта". старте события.
Максим Гречушников: описанное выше применимо хоть к клиенту, хоть к серверу. Как только на сервер поступает запрос я так полагаю он у вас уже будет знать начальные точки и их стартовые параметры. Запрос поступил, можете посчитать сразу или сложить в очередь и просчитать через минуту.
А вообще разрыв в минуту это что то с чемто честно говоря =D. За минуту может столько произойти, что синхронизировать клиентов запаришься.
Дмитрий Александров: поэтому я и думал о том, чтобы сразу рассчитывать пересечения на линии. зная время старта, скорость, зная время конца пути и расстояние обоих объектов.
если будет несколько объектов, то каждый новый рассчитывается с каждым уже существующим.