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

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

Объект доступен для движения в режиме реального времени, вы можете сказать им "startMoving|Direction|()" и "stopMoving|Direction|()". Хотя в качестве дополнительного поворота и части, с которой у меня возникают проблемы, является то, что облицовка объекта никогда не известна, известно только его текущее местоположение, поэтому алгоритм должен "определять" направление. Местоположение объекта обновляется в отдельном потоке с интервалом 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 ответ

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

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

Другие вопросы по тегам