Как описывается ваша проблема, алгоритм прост и требует только двух простых шагов: 1) двигайтесь вперед, поворачивая (влево или вправо), пока машина не будет направлена прямо на B, 2) двигайтесь прямо, пока не нажмете B . Готово.
Единственная относительно сложная часть - это первый шаг. Если B лежит слева от продольной оси автомобиля в исходном положении, естественным подходом было бы начать с поворота влево . Это будет работать, если точка B не лежит внутри круговой траектории, образованной таким левым поворотом (радиус turningRadius
). В последнем случае автомобиль будет двигаться по кругу, но никогда не сможет нацелиться непосредственно на B. В таких случаях правильная стратегия состоит в том, чтобы фактически начать с поворота вправо и вращаться, пока вы не нацелите машину у Б.
Итак, если у вас нет требований к оптимальности для вашей траектории, самый простой алгоритм для первого шага будет безоговорочно поворачивать «далеко» от точки: поверните вправо , если B лежит на влево от продольной оси автомобиля и поворот влево , если B лежит на вправо . Продолжайте поворачивать, пока машина не будет направлена прямо на B. Это звучит немного неестественно, но это всегда работает, то есть вы всегда сможете нацелить машину.
Если вы заботитесь о более оптимальной (более короткой) траектории, то вам необходимо проанализировать местоположение B относительно начальной позиции / ориентации автомобиля («Находится ли B внутри круга поворота или снаружи?») И выбрать направление первого поворота соответственно.