Скажем, у меня есть две точки на бесконечной двумерной сетке.
Первая точка — это контролируемая пользователем точка в наборе координат X, Y (3,5).
Вторая точка — это сгенерированная компьютером точка в наборе координат X, Y (-20, 30).
Я хочу, чтобы вторая точка перемещалась на 5 единиц к первой точке каждую секунду. У меня уже есть вторая точка, перемещающаяся каждую 1 секунду, но не в направлении первой точки.
Мне нужно знать, как переместить вторую точку к первой точке, а не в случайном направлении, как сейчас …
Кстати, для игры, где точка 2 — это точка преследования монстра 1 (игрок). Это кодируется в C ++.
Давайте пройдемся по нему шаг за шагом.
Точка 1 начинается с (x, y). Точка 2 находится в точке (x2, y2).
Наклон между ними равен m = (y2-y) / (x2-x). Что это говорит нам? Это говорит нам о том, что если мы хотим перейти из точки 2 в точку 1, для каждой 1 единицы, которую мы движемся в направлении x, нам нужно пройти m в направлении y.
Так что теперь у нас уже есть алгоритм, который будет двигать их навстречу друг другу! Просто не на нужной скорости.
Как мы можем выяснить, на сколько в направлении оси x нам следует переместить точку 2, чтобы после того, как она также переместилась в направлении оси y на правильную величину, она сместилась бы на 5 единиц по диагонали?
Что ж, если мы переместим 1 единицу в единицах x и m в y, мы пройдем расстояние d = sqrt (1 ^ 2 + m ^ 2) (теорема Пифагора)
Мы хотим переместиться на некоторое число X в направлении x, чтобы после перемещения Xm в направлении y мы переместились на 5 единиц. Все просто: расстояние, которое мы перемещаем, равно d = sqrt (X ^ 2 + (Xm) ^ 2). Просто установите d на 5:
5 = sqrt(X^2 + (Xm)^2)
25 = X^2 + (Xm)^2 = (m^2 + 1)*X^2
X^2 = 25/(m^2 + 1)
X = sqrt(25/(m^2 + 1))
Теперь мы уже знаем, что такое m. Поэтому мы просто подключаемся и решаем для X. Но заметим, что X всегда будет положительным. Это потому, что мы возвели в квадрат уравнение. Следовательно, вам нужно будет определить правильный знак для X. (просто проверьте, находится ли точка 1 слева или справа от точки 2)
Получив это, мы узнаем, что точка 2 должна переместить единицы X влево или вправо, а mX вверх или вниз.