Рекурсивная репараметризация длины дуги произвольной кривой

У меня есть 3D параметрическая кривая, определенная как P (t) = [x (t), y (t), z (t)].

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

Точнее, мне нужно написать функцию Q (s), которая дает точку на P, которая является (приблизительно) расстоянием s вдоль дуги от точки, где t = 0. У меня уже есть функции для числовой интеграции и деривации, которые могут быть включены в ответ.

Любые предложения будут ценны!

ps В OpenSCAD невозможно передать функции в качестве параметра, я обычно обхожу это путем использования глобальных объявлений.

Ответы

Ответ 1

Длина sigma дуги между значениями параметров t=0 и t=T может быть вычислена путем решения следующего интеграла:

sigma(T) = Integral[ sqrt[ x'(t)^2 + y'(t)^2 + z'(t)^2 ],{t,0,T}]

Если вы хотите параметризовать вашу кривую с длиной дуги, вы должны инвертировать эту формулу. Это, к сожалению, довольно сложно с математической точки зрения. Самый простой метод - реализовать простой метод деления пополам как числовой решатель. Метод вычисления быстро становится тяжелым, поэтому повторное использование предыдущих результатов является идеальным. Секущий метод также полезен, так как производная sigma(t) уже известна и равна

sigma'(t) = sqrt[ x'(t)^2 + y'(t)^2 + z'(t)^2]

Возможно, не самый полезный ответ, но я надеюсь, что он даст вам некоторые идеи. Я не могу помочь вам с реализацией OpenSCad.