Я ищу простой алгоритм парковки автомобиля для игры.
Позиции автомобиля и гаража определяются тремя числами (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]
.
Это нормально, если это будет итеративно и будет производиться одна команда за раз, а затем проверять, что происходит на следующем такте, и производить другую. Он может попросить механизм моделирования смоделировать и создать новые координаты с учетом управляющей команды или использовать механизм моделирования, чтобы попробовать несколько вариантов и выбрать лучший.
Также нормально, если он делает это серией приблизительных движений, как раз попробовал - промазал, попробовал в другой раз - приблизиться, а в третий раз - в итоге припарковался (но это должно быть более-менее разумно и не делайте десятки или сотни итераций вперед и назад).