Рекурсивная репараметризация длины дуги произвольной кривой - PullRequest
12 голосов
/ 14 марта 2019

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

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

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

Буду признателен за любые предложения!

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

1 Ответ

2 голосов
/ 19 марта 2019

Длина дуги 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...