Алгоритм разрезать сплайновый канал?

У меня есть сплайн в форме катмулла с 6 резюме, и я хочу отрезать его в произвольной точке вдоль сплайна.

Как рассчитать конечные точки двух новых сплайнов, чтобы они сохраняли форму, которая была до того, как они были разрезаны на две части?

Итак, представьте, что это сплайн с 6 точками:

p0      p2      p4
 \     / \     / \
  \   /   \C  /   \
   \ /     \ /     \
    p1      p3      p5

если я захочу обрезать этот сплайн в точке C, у меня появятся два новых сплайна с 5 резюме каждый?

Spline #1: p0, p1, p2, X, C
Spline #2: C, X, p3, p4, p5

Где X - это резюме, которое мне нужно добавить, чтобы сохранить форму сплайна. Но как мне рассчитать позицию, в которой Х должен быть?

Или моя логика совершенно неверна и существует совершенно иное решение проблемы?

Спасибо!

1 ответ

Сплайн Катмулла-Рома по сути является сплайном, составленным из нескольких кубических кривых Безье. Итак, если вы хотите разделить его при любом параметре t, вам просто нужно выяснить, на какой кривой Безье находится этот параметр, а затем разделить эту кривую Безье, используя известный алгоритм де Кастельжау. Разделенные результаты все еще являются кубическими кривыми Безье. Однако, если вы хотите найти новый набор резюме, из которого полученный сплайн Catmull-Rom будет иметь точно такую ​​же форму, что и сплит сплит от исходного сплайна, я бы сказал, что это невозможно. Я объясню в деталях ниже.

Согласно определению сплайна Катмулла-Рома, исходный сплайн, определенный 6 CV:p0, p1,..., p5, будет иметь касательную в точке p2 в направлении вектора (p1,p3). Для нового сплайна Катмулла-Рома, определенного 5 CV: p0, p1, p2, X и C, где C - любая точка на исходном сплайне CR, тангенс в точке p2 будет в направлении вектора (p1,X).

Если мы хотим, чтобы новый сплайн CR точно представлял сплит сплит № 1 исходного сплайна, то касательная в точке p2 от этих двух сплайнов должна быть, по крайней мере, в одном направлении, что означает, что точка X должна лежать на линии, определенной p1 и р3. Этот критерий делает невозможным, чтобы новый сплайн Catmull-Rom точно представлял форму расщепленного сплайна № 1 от исходного сплайна.

Другие вопросы по тегам