Следующая идея вдохновлена Динамическая деформация времени (DTW). Это продолжение идеи Shreyas Pimpalgaonkar в комментариях:
Общая идея состоит в том, чтобы сопоставить точки на одной стороне улицы с точками на другой стороне. Например, распределите 100 точек по обеим сторонам и попытайтесь нарисовать линии между ними. Критерий, который мы будем использовать для сопоставления точек, - это близость. Таким образом, общая длина соединительных линий должна быть как можно меньше. Получив эти линии, мы можем рассчитать их средние точки и соединить их. Это также даст вам более гладкую линию, в зависимости от того, сколько очков вы начинаете.
Вот некоторые детали: Распределение очков не так сложно. Вы можете либо поставить очки каждые х единиц. Или вы можете распределить постоянное количество точек по сегментам. В конце концов, не имеет большого значения, как распределены баллы. Тем не менее, равномерное распределение даст вам лучшие результаты.
Центральная точка - вариант DTW. Основные данные для этого алгоритма - это матрица соответствия, которая говорит вам, насколько дорого сопоставлять одну точку с другой. Для этого вы можете использовать евклидово расстояние двух точек. Если у вас есть эта матрица (она не должна быть полной матрицей; обычно достаточно записей около диагонали; см. Ограничение локальности в статье в Википедии), вы просто решаете проблему деформации с помощью динамической программы.
И, наконец, вы подключаетесь к средним точкам. Вот и все.
Я должен добавить, что это не обязательно гарантирует сохранение пути внутри полосы движения. Однако, это сломается только с очень странными дорожными созвездиями. Если вы хотите быть в безопасности, вы можете адаптировать матрицу затрат таким образом, чтобы алгоритм не совпадал с точками, где соединительная линия пересекает границу полосы движения.
Вот несколько примеров. Если вам нужны более гладкие пути, вы можете изменить точку, которую вы выбрали на соединительных линиях (вместо средней точки). Вы могли бы, например, оптимизировать параметр интерполяции по отношению к лапласиану сгенерированной линии. Это даст вам линейную систему уравнений, которая позволит вам контролировать гладкость пути. Однако не так-то просто гарантировать, что путь останется внутри полосы движения.