В настоящее время я работаю над программой, которая берет масштабный SVG-файл трассы и использует данные для аппроксимации трассы в виде массива точек. В идеале абсолютное значение уклонов между любыми двумя последовательными точками должно быть одинаковым, поскольку это позволило бы мне приблизить угол, длину дуги и радиус с известной точностью для использования при расчете максимальной скорости вокруг кривой.
SVG использует приближение Безье с 2 контрольными точками. У меня есть функция, которая принимает начальную точку, 2 контрольные точки и конечную точку, а также параметрическую переменную t. Я нашел код для этого здесь:
Рисование кривых Безье с использованием алгоритма де Кастельжау в C ++, OpenGL
Я хотел бы получить результат, состоящий в том, что прямые будут состоять из очень небольшого количества отрезков (наклон очень мало меняется), в то время как крутые повороты состоят из множества отрезков (наклон резко меняется). Это будет поддерживать постоянную точность в расчетах.
Использование постоянного шага для t не обеспечивает постоянного наклона между двумя точками, что является огромной проблемой для расчетов. Есть ли способ найти правильное значение t, зная желаемый наклон результирующего отрезка?
После долгих поисков и уточнения терминов я нашел сайт, в котором подробно объясняется ответ на мою проблему. Оказывается, моя проблема заключается в том, с чем сталкиваются движки рендеринга для рисования кривых Безье, и в движке анти-зернистого рендеринга есть замечательный учебник по подразделению кривых Безье для аппроксимации всех видов изгибов и поворотов.
http://www.antigrain.com/research/adaptive_bezier/index.html