// 1 текущая позиция
position_x = 1;
position_y = 2;
// 2 место назначения
destination_x = 2;
destination_y = 2;
// 3 вектор направления
direction_x = destination_x - position_x;
direction_y = destination_y - position_y;
// 4 длина вектора направления
direction_length = sqrt(direction_x * direction_x + direction_y * direction_y)
// 5 нормализованный вектор направления, что бы можно было умножать на скорость
if (direction_length == 0) {
normalized_direction_x = 0;
normalized_direction_y = 0;
} else {
normalized_direction_x = dirextion_x / direction_length;
normalized_direction_y = direction_y / direction_length;
}
// 6 скорость, например за шаг или секунду
speed = 0.5
// 7 вектор скорости
velocity_x = normalized_direction_x * speed;
velocity_y = normalized_direction_y * speed;
// 8 следующая точка на которую можно переместиться
// в принципе, уже ответ на вопрос, но! дальше - лучше
next_position_x += velocity_x
next_position_y += velocity_y
// 9 расстояние от текущей точки до места назначения
to_destination_distance = sqrt((position_x - destination_x)^2 + (position_y - destination_y)^2)
// 10 расстояние от текущей точки до следующей точки
to_next_position_distance = sqrt((position_x - next_position_x)^2 + (position_y - next_position_y)^2)
// 11 сравниваем, если до места назначения ближе чем до следующего шага:
// ==с========n==
// ==c=====d=====
// то двигать только до места назначения, не дальше
if (to_destination_distance <= to_next_position_distance) {
position_x = destination_x
position_y = destination_y
} else {
position_x = next_position_x
position_y = next_position_y
}
// пункты 2-11 повторять до тех пор пока не приедем в место назначения