Рекурсивная репараметризация длины дуги произвольной кривой
У меня есть 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.