алгоритм — Как мне переместить одну точку в другую точку в C ++?

Скажем, у меня есть две точки на бесконечной двумерной сетке.

Первая точка — это контролируемая пользователем точка в наборе координат X, Y (3,5).

Вторая точка — это сгенерированная компьютером точка в наборе координат X, Y (-20, 30).

Я хочу, чтобы вторая точка перемещалась на 5 единиц к первой точке каждую секунду. У меня уже есть вторая точка, перемещающаяся каждую 1 секунду, но не в направлении первой точки.

Мне нужно знать, как переместить вторую точку к первой точке, а не в случайном направлении, как сейчас …

Кстати, для игры, где точка 2 — это точка преследования монстра 1 (игрок). Это кодируется в C ++.

0

Решение

Давайте пройдемся по нему шаг за шагом.

Точка 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 вверх или вниз.

3

Другие решения


По вопросам рекламы [email protected]