Как я могу соединить пути двух объектов? - PullRequest
2 голосов
/ 15 мая 2019

У меня есть данные временного ряда для положения двух объектов.Второй объект примерно следует пути первого объекта.Я хочу соединить два объекта изогнутой линией, которая наилучшим образом представляет объединенные пути двух объектов.Это постобработка, поэтому я уже знаю будущие пути обоих объектов.Я могу использовать информацию о том, где будет находиться второй объект, чтобы вычислить путь. Ссылка на файл .csv исходных данных на Google Диске - синие - это столбцы 0,1, а желтый - это 3,4.

Мои исходные данные выглядят так:

yellow following blue

Объекты расположены достаточно равномерно.Объект два достигает позиции объекта один примерно за 50 кадров.Мой первоначальный подход состоял в том, чтобы взять последние 25 кадров объекта голубого цвета и будущие 25 кадров желтого объекта.Я использовал signal.savgol(), чтобы сгладить результаты (показаны розовым цветом).

positions = leading_object[frame_number - 25: frame_number]
positions += trailing_object[frame_number: frame_number + 25
x,y = zip(*positions)
window_length = int(len(x)*.5)
if window_length//2 == window_length/2: window_length -= 1
x = signal.savgol_filter(x, window_length, polyorder)
y = signal.savgol_filter(y, window_length, polyorder)
positions = list(zip(x,y))

path

Это работает нормально, но сглаженная линия пробежки с одного пути на другой.Я бы хотел, чтобы путь был плавным.

actual vs desired

Ссылка на полный код, используемый для создания анимации.

1 Ответ

0 голосов
/ 16 мая 2019

По сути, вы пытаетесь выполнить подгонку кривой для кривой, которая объединяет две позиции и интерполирует некоторые точки двух линий. В настоящее время проблема немного переопределена, потому что у вас слишком много точек. Это приводит к «перегибам» на кривой.

Возможно, выбрав меньше очков, например, 5-е, 10-е, 15-е от каждой частичной траектории, дающей 6 баллов плюс ваши фиксированные конечные точки, будут работать лучше.

Я бы тогда выбрал стратегию подбора кривой, которая обеспечивает хорошую непрерывность для производных, таких как неоднородный рациональный B-сплайн (NURB) или, возможно, полином Чебышева.

...