Как решить задачу про передвижение робота из начальной точки в конечную?
читаю задачу и не понимаю с чего начать решение... Получается нужно реализовать алгоритм передвижения робота из начальной точки в конечную точку и при этом учесть, что координаты x и y могут быть отрицательными.
Описание: На игровом поле находится робот. Позиция робота на поле описывается двумя целочисленным координатами: X и Y. Ось X смотрит слева направо, ось Y — снизу вверх.
В начальный момент робот находится в некоторой позиции на поле. Также известно, куда робот смотрит: вверх, вниз, направо или налево. задача — привести робота в заданную точку игрового поля.
Робот описывается классом Robot. Вы можете пользоваться следующими его методами (реализация вам неизвестна):
public class Robot {
public Direction getDirection() {
// текущее направление взгляда
}
public int getX() {
// текущая координата X
}
public int getY() {
// текущая координата Y
}
public void turnLeft() {
// повернуться на 90 градусов против часовой стрелки
}
public void turnRight() {
// повернуться на 90 градусов по часовой стрелке
}
public void stepForward() {
// шаг в направлении взгляда
// за один шаг робот изменяет одну свою координату на единицу
}
}
Direction, направление взгляда робота, — это перечисление:
public enum Direction {
UP,
DOWN,
LEFT,
RIGHT
}
Как это выглядит: см картинка
Пример:
В метод передано:
toX == 3, toY == 0; начальное состояние робота такое: robot.getX() == 0, robot.getY() == 0, robot.getDirection() == Direction.UP
Чтобы привести робота в указанную точку (3, 0), метод должен вызвать у робота следующие методы:
robot.turnRight();
robot.stepForward();
robot.stepForward();
robot.stepForward();
https://i.stack.imgur.com/BSdX4.jpg
Ответы (1 шт):
- Определяете "справа" или "слева" горизонтальная координата куда надо идти (вычитанием текущей координаты рорбота из цеелвой координаты). Кроме направления этот метод даст расстояние до цели (например если текущая координата -2, а целевая -7, то -7-(-2) = -5, что значит, что цель находится на 5 шагов левее по "иксу")
- Определяете "сверху" или "снизу" вертикальная координата (таким же способом)
- Определяете текущее направление робота. Ваша задача пройти нужное количество шагов по вертикали, потом повернуть и пройти нужное количество шагов по горизонтали (или наоборот)
- Исходя из текущего направления робота решаете сколько раз надо повернуться. Например в шаге 1 если направление робота "направо", то перед тем как начать движение, необходимо повернуться налево и еще раз налево (развернув его на 180 градусов).
- На каждом шаге решаете дошлел ли робот до нужной координаты и если да, снова переходете к шагу 3 для движение (при необходимости) по следующей оси.