Я ищу простой алгоритм парковки для игры.
Положение автомобиля и гаража, каждое из которых определяется 3 числами (x, y, theta)
. Где x
и y
- центр объекта и theta
- угол между осью объекта и осью X.
Движение автомобиля упрощено - это точка (не нужно рассчитывать точное движение шины), которая может двигаться с fixed speed
назад и вперед или поворачивать по кругу с радиусом R
( Радиус поворота может быть фиксированным или гибким - не имеет значения - любой вариант подходит для меня), и он имеет no inertia or acceleration
.
В гараже есть 3 стены, которые не должны касаться машины. Для столкновения можно использовать точные размеры, но для простоты столкновение проверяется путем измерения углов между автомобилем и гаражом и расстоянием между осью автомобиля и центром гаража. Когда автомобиль и гараж находятся достаточно близко (расстояние между центрами меньше некоторой постоянной CloseEnough
), столкновение проверяется (alpha, d) < (maxAlpha, maxDistance)
Мир, смоделированный тиками, мы берем текущие элементы управления автомобилем - moving direction
вперед или назад и turning angle
и вычисляем автомобиль на следующую позицию.
Алгоритм должен выдавать последовательность команд управления, например [forward, left], [forward, left], [backward, straight], [forward, right]
.
Это нормально, если оно будет итеративным и будет производить по одной команде за раз - затем проверьте, что происходит на следующем тике, и сгенерируйте еще один. Он может попросить механизм моделирования смоделировать и вывести новые координаты с помощью управляющей команды или , используя механизм моделирования, чтобы опробовать несколько вариантов и выбрать лучший .
Также это нормально, если он делает это с помощью серии приближенных движений , как будто он пытался один раз - пропустил, попробовал в другой раз - приблизиться и в третий раз - наконец припарковаться (но это должно быть более или менее разумно и не делайте десятков или сотен итераций вперед и назад).