Вы можете точно и быстро решить эту проблему для произвольной рациональной кривой, преобразовав ее в рациональную кривую Безье, а затем применив алгоритм де Кастельжау. Это легко сделать для коников, таких как круги и гиперболы:
http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/NURBS/RB-conics.html
Если у вас есть рациональная кривая Безье, для повторной выборки кривой в дискретные шаги вы должны использовать алгоритм де Кастельжау. Этот алгоритм использует динамическое программирование и является очень быстрым и численно устойчивым. Если вы не слышали об этом раньше, я действительно рекомендовал бы узнать об этом, так как это довольно умный маленький алгоритм:
http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/de-casteljau.html
Есть несколько способов, которыми вы можете использовать алгоритм де Кастельжау, чтобы получить дискретную выборку вашей кривой. Во-первых, вы можете просто наивно применять его для оценки кривой вдоль ее пространства параметров с равномерными приращениями. Если приращения должны быть равномерно распределены, вы должны изменить координаты интерполяции на единицы длины дуги:
http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/curves/continuity.html#Arc-Length-Parameterization
Уточнение этого метода состоит в том, чтобы вместо этого преобразовать в параметризацию длины хорды, которая со временем приближается к параметризации длины дуги:
http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/INT-APP/PARA-chord-length.html
Наконец, если вам нужно много точек на кривой, вы можете просто применить алгоритм де Кастельжау в качестве процедуры резки угла, чтобы уточнить начальный вектор контрольной точки в предельный многоугольник, который произвольно приближает желаемую кривую до некоторого указанного пользователем допуск:
http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezier-sub.html
Эти записи были взяты у профессора К.К. Заметки к курсу Шене, которые являются отличным ресурсом для изучения сплайнов и поверхностей подразделений:
http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/