C # Алгоритм маршрутизации для перемещения объекта из точки (X, Y) в точку (X, Y) - PullRequest
0 голосов
/ 22 марта 2011

Данный объект, который может двигаться вперед, назад, влево и вправо в заданной точке X, Y.Как эффективно направить объект в точку X, Y, используя данную механику движения наиболее эффективным и естественным для человека способом.

Объект доступен для движения в режиме реального времени, вы можете сказать им «startMoving |Направление | () "и" stopMoving | Направление | () ".Хотя в качестве дополнительного поворота и части, с которой у меня возникают проблемы, это то, что облицовка объекта никогда не известна, известно только его текущее местоположение, поэтому алгоритм должен «определять» направление.Местоположение объекта обновляется в отдельном потоке с интервалом 500-1 с.«Запрос» на обновление местоположения в алгоритме выполняется в любой момент, но он не доступен сразу, и алгоритм должен учитывать это.Делать что-то вроде requestAndWaitForCoordUpdate () вполне приемлемо, но, вероятно, не нужно.

Кроме того, никаких препятствий не появляется, можно предположить, что вы находитесь на САМОЙ открытой плоскости, отклоняясь от прямой прямой линии междупути, и вы можете столкнуться с препятствиями.Можно с уверенностью предположить, что 1/4 расстояния между целью и источником должно быть доступно по ширине на данном прямом пути.

Я также хотел бы отметить, что я не уверен, что A * применяется в этом сценарии, еслиэто я не уверен, как реализовать это с учетом ограничений.Единственная реальная переменная здесь - это внешний вид объекта.

Вот пример кода:

public int[] currentCoords;
public void movement() {
  currentCoords[0] = 1005; // starting y coord
  currentCoords[1] = 1007; // starting x coord
  moveTo(1050, 1025);
}

public void moveTo(int x, int y) {
  ... how?
}

public void threadUpdatingCoords() {
   ... periodically check for source coord updates
   ... between 200ms and 1000ms apart.
}

1 Ответ

0 голосов
/ 22 марта 2011

Для расчета оптимального маршрута следует использовать алгоритм A *. Однако, чтобы сделать это самым человечным способом, вы просто позволяете ему идти и принимать случайные указания. Если это не умный человек, он просто приставит правую руку к стене и будет идти, не теряя связи: в конце концов вы достигнете своей цели.

Человек не эффективен, он случайный. A * не случайно, это эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...