Немного фона. У меня есть симуляция, которая использует кубические сплайны для одномерных траекторий. В этом контексте кубический сплайн определяет положение объекта, скорость, ускорение и рывок как функцию времени.
Если у вас есть:
- начальные и конечные значения для
положение, скорость, ускорение и
время
- постоянные значения ограничений на
максимальная и минимальная скорость,
ускорение и рывок
тогда есть уникальный сплайн. Если вы не указываете конечное время, а хотите использовать траекторию минимального времени, то существует также уникальный сплайн.
Однако нахождение этих сплайнов может быть королевской болью. В случае, когда указано время, сплайн будет содержать до 7 полиномов, а узлы (точки перехода между полиномами) заранее неизвестны.
Это не обычный случай подгонки сплайна к набору данных, это создание сплайнов из граничных условий и некоторых дополнительных ограничений. Я читал статьи, в которых люди использовали схожие механизмы и имели схожие потребности, но я никогда не обнаруживал библиотек (или даже исходного кода), которые бы занимались генерацией сплайнов такого рода. Я написал некоторый код, который обрабатывает большинство случаев, но он не очень надежный и быстрый. Я не очень беспокоюсь о том, что это быстро, но было бы лучше, если бы он был крепче.
Есть ли библиотеки, которые могут сделать это доступным? Открытый исходный код, даже если он не собран как библиотека? C, C ++, Java или Python предпочтительнее, но если это открытый исходный код, другие языки все равно будут полезны в качестве ссылки.