Divisão de curvas NURBS

8

tÉ fácil dividir a curva de Bezier em duas partes em algum parâmetro, graças ao algoritmo de De Casteljau .

Existe um algoritmo semelhante para curvas NURBS? Como dividir uma curva NURBS?

Ecir Hana
fonte
Não sei se fará o mesmo, mas o algoritmo de De Boor é o equivalente a De Casteljeau. Curiosamente, eu sei que você pode usar o algoritmo de De Boor para dividir um NURBS ou b-spline em uma curva de Bezier por partes.
27715 Alan Wolfe

Respostas:

5

A maneira como as curvas NURBS são normalmente divididas em um ponto arbitrário é pela inserção do nó . Você insere nós no ponto de divisão até atingir a multiplicidade máxima; nesse ponto, você pode apenas ler as duas curvas de divisão.

No entanto, você pode não querer dividir em um ponto arbitrário. Se o objetivo final é desenhar as curvas ou algo parecido, vale a pena dividir a curva nos pontos de nó existentes (ou seja, executar a inserção do nó até que todos os nós estejam na multiplicidade máxima) em vez de inserir novos.

Este processo divide os NURBS em B-splines racionais uniformes . Depois disso, você pode usar o algoritmo de de Boor para dividir ainda mais.

O número de nós no vetor de nó é:

numKnots = degreeOfCurve + numControlPoints + 1

ou se você preferir:

numKnots = orderOfCurve + numControlPoints

Inserir um nó aumenta o número de pontos de controle em um.

À medida que você percorre uma curva NURBS, cada nó representa um local onde um ponto de controle "cai" e outro "entra". Se um valor de nó é repetido, isso significa que mais de um ponto de controle é substituído neste local.

Para uma curva de grau maior que 1, os e os últimos nós são repetidos várias vezes por um motivo simples: você precisa inserir mais de um ponto para começar e ejetar mais de um ponto para terminar.

Vamos pensar em curvas cúbicas no momento, apenas para manter as coisas simples.

Uma curva com o vetor de nó [0,0,1,1] é uma curva B-spline uniforme.

Uma curva com o vetor de nó [0,0,1,1,2,2] não é uniforme, mas pode ser vista como duas curvas uniformes de B-spline que se conectam em t = 1, uma correspondente a [0,0 , 1,1] e um correspondente a [1,1,2,2]. Você pode fazer isso porque a multiplicidade dos nós é suficiente para "iniciar" e "terminar" uma curva cúbica.

Se você se deparar com uma curva com um vetor de nó como [0,0,1,2,2], poderá inserir um nó em 1 sem alterar a forma da curva (este é o procedimento de inserção do nó). Isso aumenta o número de pontos de controle em um; o procedimento de inserção do nó ajusta os pontos ao redor do novo nó para acomodá-lo. Mas depois de fazer isso, você tem duas curvas uniformes de B-spline.

A inserção do nó não criará pontos de controle sobrepostos, a menos que você insira muitos nós no mesmo local e, por "muitos", quero dizer o grau da curva. Portanto, para uma curva cúbica não uniforme, você deve inserir nós para que cada nó tenha multiplicidade 2. Isso fornece várias curvas cúbicas uniformes, que você pode usar o algoritmo de de Boor para dividir ainda mais.

Pseudônimo
fonte
Me desculpe, eu sou muito novo no NURBS: o que você quer dizer com "multiplicidade máxima"? Quero dizer, quando faço da maneira anterior, acabo com vários pontos de controle sobrepostos?
precisa saber é o seguinte
Deixe-me tentar explicar na resposta.
Pseudônimo
11
O pseudônimo erra não, não é um bom vetor de nó para demonstrar isso. Vejo que talvez seja necessário expandir o outro post. Embora @EcirHana, pode ser uma boa ideia perguntar o que é uma multilicidade.
Joojaa
Você provavelmente está certo sobre isso @joojaa.
Pseudônimo