Пожалуйста, найдите время, чтобы понять мою ситуацию.Если это не понятно, пожалуйста, сообщите мне в комментарии.
У меня есть ArrayList of Waypoints.Эти путевые точки расположены не в любом порядке.Путевая точка имеет следующие свойства:
{int type, float z, float y, float x, float rotation}
Это относится к 3-мерному миру, но, так как мой поиск пути не должен заботиться о высоте (и, таким образом, рассматривать мир как 2-мерный),значение у игнорируется.Вращение не имеет значения для этого вопроса.
- В этом двумерном мире, х представляет ось X, а Z представляет ось Y.
- Если х увеличивается, объектв мире движется на восток.Если x уменьшается, объект в мире перемещается на запад.
- Если z увеличивается, объект в мире перемещается на север.Если z уменьшается, объект в мире перемещается на юг.
Таким образом, эти "новые" путевые точки могут быть упрощены до: waypoint = {float x, float y}
.
Теперь эти путевые точки представляют Xоси (x) и оси Y (z) местоположения объекта.Кроме того, есть текущее местоположение: curLocation = {float x, float y}
и целевое местоположение: tarLocation = {float x, float y}
.
Вот что я хочу получить:
Все комбинации путевых точек (иначе: пути или маршруты), который приведет от curLocation
до tarLocation
при следующих строгих условиях:
- Расстояние между каждой путевой точкой не должно превышать
(float) maxInbetweenDistance
.Это включает начальное расстояние от curLocation
до первой путевой точки и расстояние от последней путевой точки до tarLocation
.Если такая комбинация путевых точек невозможна, следует вернуть значение null. - Если в пределах
maxInbetweenDistance
найдено несколько путевых точек от путевой точки, ведущей к целевой путевой точке, следует выбрать ближайшую путевую точку (еще лучшеесли альтернативная путевая точка, которая находится немного дальше, приведет к появлению нового пути с более длинным расстоянием, которое также будет возвращено). - Порядок возвращаемых комбинаций путевых точек (путей) должен быть от кратчайшего маршрута (минимального расстояния) досамый длинный маршрут (максимальное расстояние)
Наконец, пожалуйста, обратите внимание на следующие моменты:
- Это единственное, что мне нужно, чтобы делать AI / поиск пути, поэтому я и делаюне хочу использовать полноценную систему поиска пути или искусственного интеллекта.Я полагаю, что одна функция должна быть в состоянии справиться с вышеперечисленным.
- Если возврат всех возможных комбинаций путевых точек приводит к слишком большим накладным расходам, было бы также хорошо, если бы можно было указать максимальное количество комбинаций (но все же заказано изближайший к дальнему).Например.5 ближайших путей.
Как бы мне этого добиться?Любые отзывы приветствуются.