Мне нужно дискретизировать кривую Безье 3-го порядка с точками, равномерно распределенными вдоль кривой. Кривая определяется четырьмя точками р0, р1, р2, р3 и общая точка р (т) с 0 < т < 1 определяется по формуле:Равномерная дискретизация кривой Безье
point_t = (1 - t) * (1 - t) * (1 - t) * p0 + 3 * (1 - t) * (1 - t) * t * p1 + 3 * (1 - t) * t * t * p2 + t * t * t * p3;
Моя первая мысль была discretise т = 0, t_1 , ... t_n, ..., 1
Это не работает, поскольку в общем случае мы не получаем равномерного расстояния между дискретизированными точками.
Подводя итог, что мне нужно это алгоритм discretise параметрическую кривую так, чтобы:
|| p(t_n) - p(t_n_+_1) || = d
Я думал о рекурсивно вдвое сократить кривую Безье с Casteljau algorithm до требуемого разрешения, но это потребовало бы много дистанционных вычислений.
Любая идея о том, как решить эту проблему аналитически?
То, что вы ищете, также называется параметризацией длины дуги. В общем случае, если вы разделите кривую Безье с фиксированным интервалом «параметризации по умолчанию», результирующие сегменты кривой не будут иметь одинаковую длину дуги. Вот один из способов сделать это http://pomax.github.io/bezierinfo/#tracing. – hkrish
Большое спасибо @hkrish! Расстояние выборки (t) и интерполяция - довольно элегантный способ решения проблемы. Я тестирую его. Не стесняйтесь добавить это как ответ, чтобы я мог принять его – Nic
Вы имеете в виду постоянную прямую (аккорд) или криволинейную дистанцию? –