Разделить кривую Безье на две части по некоторому параметру t
легко благодаря алгоритму де Кастельжау .
Есть ли аналогичный алгоритм для кривых NURBS? Как разбить кривую NURBS?
Разделить кривую Безье на две части по некоторому параметру t
легко благодаря алгоритму де Кастельжау .
Есть ли аналогичный алгоритм для кривых NURBS? Как разбить кривую NURBS?
Ответы:
Способ, которым кривые NURBS обычно разделяются в произвольной точке, заключается в вставке узла . Вы вставляете узлы в точке разделения, пока она не достигнет максимальной кратности, и в этот момент вы можете просто прочитать две кривые разделения.
Тем не менее, вы не можете разделить в произвольной точке. Если конечная цель состоит в том, чтобы нарисовать кривые или что-то в этом роде, то лучше разделить кривую по существующим точкам узлов (то есть выполнить вставку узлов, пока все узлы не достигнут максимальной кратности), а не вставлять новые.
Этот процесс разбивает NURBS на однородные рациональные B-сплайны. Получив это, вы можете использовать алгоритм де Бур для дальнейшего разделения.
Количество узлов в векторе узлов:
или если вы предпочитаете:
Таким образом, вставка узла увеличивает количество контрольных точек на одну.
Когда вы путешествуете по кривой NURBS, каждый узел представляет собой место, где одна контрольная точка «выпадает», а другая «входит». Если значение узла повторяется, это означает, что в этом месте заменяется более одной контрольной точки.
Для кривой степени больше 1 первый и последний узлы повторяются несколько раз по одной простой причине: вам нужно ввести более одной точки, чтобы начать, и вам нужно выбросить более одной точки до конца.
Давайте пока подумаем о кубических кривых, просто чтобы все было просто.
Кривая с вектором узла [0,0,1,1] является равномерной кривой B-сплайна.
Кривая с вектором узла [0,0,1,1,2,2] является неоднородной, но ее можно рассматривать как две однородные кривые B-сплайна, которые соединяются при t = 1, одна соответствует [0,0 , 1,1] и один соответствует [1,1,2,2]. Вы можете сделать это, потому что кратности узлов достаточно, чтобы «начать» и «закончить» кубическую кривую.
Если вы столкнулись с кривой с вектором узла, например [0,0,1,2,2], вы можете вставить узел в 1, не меняя форму кривой (это процедура вставки узла). Это увеличивает количество контрольных точек на одну; процедура вставки узла регулирует точки вокруг нового узла, чтобы приспособить его. Но как только вы это сделаете, у вас есть две одинаковые кривые B-сплайна.
Вставка узлов не создаст перекрывающихся контрольных точек, если вы не вставите слишком много узлов в одно и то же место, а под «слишком многими» я подразумеваю степень кривой. Таким образом, для неоднородной кубической кривой вы должны вставить узлы таким образом, чтобы каждый узел имел кратность 2. Это дает вам ряд примыкающих однородных кубических кривых, которые затем вы можете использовать алгоритм де Бур для дальнейшего разделения.
источник