Suddivisione delle curve NURBS


8

Dividere la curva di Bezier in due parti con alcuni parametri tè facile grazie all'algoritmo di De Casteljau .

Esiste un algoritmo simile per le curve NURBS? Come dividere una curva NURBS?


Non so se farà lo stesso, ma l'algoritmo di De Boor è l'equivalente di De Casteljeau. È interessante notare che so che puoi usare l'algoritmo di De Boor per dividere una NURBS o una b-spline in una curva di Bezier a tratti.
Alan Wolfe,

Risposte:


5

Il modo in cui le curve NURBS sono in genere divise in un punto arbitrario è mediante l' inserimento del nodo . Inserite nodi nel punto di divisione fino a quando non raggiunge la massima molteplicità, a quel punto potete semplicemente leggere le due curve divise.

Tuttavia, potresti non voler dividere in un punto arbitrario. Se l'obiettivo finale è quello di disegnare le curve o qualcosa del genere, allora vale la pena dividere la curva nei punti di nodo esistenti (ovvero eseguire l'inserimento dei nodi fino a quando tutti i nodi sono nella massima molteplicità) piuttosto che inserirne di nuovi.

Questo processo divide la NURBS in B-spline razionali uniformi . Una volta che lo hai, puoi usare l'algoritmo di de Boor per dividere ulteriormente.

Il numero di nodi nel vettore nodo è:

numKnots = degreeOfCurve + numControlPoints + 1

o se preferisci:

numKnots = orderOfCurve + numControlPoints

L'inserimento di un nodo aumenta quindi il numero di punti di controllo di uno.

Mentre percorri una curva NURBS, ogni nodo rappresenta un punto in cui un punto di controllo "cade" e un altro "entra". Se un valore di nodo viene ripetuto, significa che in questo punto viene sostituito più di un punto di controllo.

Per una curva di grado maggiore di 1, l'ultimo e i nodi vengono ripetuti più volte per un semplice motivo: è necessario inserire più di un punto per iniziare e è necessario espellere più di un punto per finire.

Pensiamo alle curve cubiche per il momento, solo per mantenere le cose semplici.

Una curva con il vettore nodo [0,0,1,1] è una curva B-spline uniforme.

Una curva con il vettore nodo [0,0,1,1,2,2] non è uniforme, ma può essere considerata come due curve B-spline uniformi che si collegano a t = 1, una corrispondente a [0,0 , 1,1] e uno corrispondente a [1,1,2,2]. Puoi farlo perché la molteplicità dei nodi è sufficiente per "iniziare" e "terminare" una curva cubica.

Se ti trovi di fronte a una curva con un vettore di nodo come [0,0,1,2,2], puoi inserire un nodo in 1 senza modificare la forma della curva (questa è la procedura di inserimento del nodo). Ciò aumenta il numero di punti di controllo di uno; la procedura di inserimento del nodo regola i punti attorno al nuovo nodo per adattarlo. Ma una volta che lo hai fatto, hai due curve B-spline uniformi.

L'inserimento del nodo non creerà punti di controllo sovrapposti se non si inseriscono troppi nodi nello stesso punto e per "troppi" intendo il grado della curva. Quindi, per una curva cubica non uniforme, dovresti inserire nodi in modo che ogni nodo avesse una molteplicità 2. Ciò ti dà un numero di curve cubiche uniformi adiacenti, che puoi quindi usare l'algoritmo di de Boor per dividere ulteriormente.


Mi dispiace di essere molto nuovo in NURBS: cosa intendi per "massima molteplicità"? Voglio dire, quando lo faccio nel primo modo, finisco con più punti di controllo sovrapposti?
Ecir Hana,

Vorrei provare a spiegare nella risposta.
Pseudonimo del

1
Lo pseudonimo non è un buon vettore di nodi per dimostrarlo. Vedo che potrei aver bisogno di espandere l'altro post. Anche @EcirHana potrebbe essere una buona idea chiedersi cos'è una multilicità.
joojaa,

Probabilmente hai ragione su questo @joojaa.
Pseudonimo del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.