Notions de base de B-spline rationnelle non uniforme (NURBS)

9

J'essaie de comprendre les courbes NURBS (surfaces plus tard!) Mais j'ai du mal à comprendre les bases de son fonctionnement interne. Quelqu'un pourrait-il m'expliquer quelques choses? Comme je viens des courbes de Bézier, une comparaison entre ces deux serait particulièrement utile.

  1. La "fonction de base rationnelle" ressemble un peu au polynôme de Bernstein de la courbe de Bézier (rationnelle). Le paramètre upasse- t-il également de 0 à 1?

  2. Comment "ajouter des détails" à une courbe? Je veux dire, avec Béziers, si j'avais besoin de décrire une forme plus compliquée, je "assemblerais" plusieurs Béziers ensemble. Ou moins souvent, augmentez le degré. Je comprends que je peux également augmenter le degré de NURBS et mettre plusieurs courbes NURBS côte à côte, mais est-ce ainsi que cela devrait être fait?

  3. L'article de Wikipédia, du moins pour moi, ne semble pas très clair à propos de ce "vecteur de nœud". Qu'est-ce que c'est de toute façon?

Ecir Hana
la source
C'est un peu trop de choses pour une question. Je peux essentiellement résumer ma conférence d'introduction sur le sujet en quelques heures. Un peu entrer dans le détail de l'utilisation de De casteljanu et de l'algorithme de Boor me prendrait trop de temps.
joojaa
1
J'aimerais donc que les questions 3, 5 et éventuellement 6 soient divisées en questions distinctes pour que la réponse et la compréhension soient plus grosses.
joojaa
@joojaa Bien sûr, je peux diviser la question, juste une seconde ...
Ecir Hana
1
Les questions 3 , 5 et 6 ont donc été séparées en questions distinctes.
Ecir Hana

Réponses:

7

Les B-Splines et Béziers sont des inventions parallèles à peu près la même chose. Où Béziers essaie de partir de l'idée d'ajuster les tangentes. Les B-Splines partent de l'idée des fonctions de base. Les splines NURB (ou la partie rationnelle en fait) ne sont que des généralisations de splines B afin que vous puissiez décrire des sections coniques précises *, car elles présentent un intérêt particulier pour l'ingénierie.

Commençons par une terminologie NURB Spline simple. La logique de ces courbes est un peu différente de celle de Béziers. Il y a d'abord le concept de travée. Une travée serait à peu près équivalente à une spline de Bézier entière, sauf que dans les banlieues, vous pouvez avoir un certain nombre de travées.

entrez la description de l'image ici

Image 1 : Une travée cubique NURBS. C'est un peu atypique dans sa formulation

Chaque travée est formée par le degré de la courbe + 1 points de contrôle **. Chaque courbe peut être constituée d'un nombre quelconque de points. Chaque intervalle consécutif réutilise les points de l'intervalle précédent en supprimant un point et en prenant un point de plus dans la liste. Il est donc aussi facile de créer des courbes plus complexes que d'ajouter simplement plus de points à la courbe.

REMARQUE : Les courbes des images sont un peu paramétrées de façon atypique, ce qui explique mal ce que cela signifie dans la section suivante. Quand je prends le concept de nœuds. C'est juste un moyen plus simple d'expliquer comment les courbes se collent.

entrez la description de l'image ici

Image 2 : 2 travées cubiques l'une après l'autre, chaque travée utilise 4 points. ensemble, ils forment une courbe. Ils partagent la plupart des points entre eux.

À ce jour, nous avons probablement répondu à la question 2 sur l'ajout de complexité. Mais je voudrais ajouter que ce schéma assure une meilleure continuité qu'une courbe de Bézier. De plus, vous pouvez rendre le tableau de points qui forme la coque cyclique. Former une courbe fermée.

entrez la description de l'image ici

Image 3 : Une surface NURBS cubique fermée a autant de travées que de points. Chaque couleur est une portée.

Paramétrisation

Jusqu'à ce point, on pourrait simplement dire que l'enchaînement des travées est un truc tout comme "coudre" les courbes de Bézier. Mais il y a une différence. La courbe est paramétrisée sur toute sa longueur. Les courbes ne sont donc pas séparées, elles n'interpolent pas la forme 0 à 1 sur chaque travée comme le font Béziers. Au lieu de cela, la courbe sous-jacente a une plage de paramètres personnalisables. Le paramètre est stocké dans quelque chose appelé nœud, et chaque nœud peut avoir une valeur croissante arbitraire dans la séquence. Vous pouvez donc paramétrer toute la gamme u des courbes à 0 - 1 ou 0 à 12. La paramétrisation ne doit pas non plus être uniforme.

Cette paramétrisation modifie la forme de la courbe. Pourquoi cela serait-il utile? Eh bien, vous pouvez régler la tension le long de la courbe pour un. Ou vous pouvez encoder la longueur de la courbe dans le paramètre U. Une utilisation particulière est de faire en sorte que la courbe NURBS agisse comme une courbe de Bézier soit entièrement ou juste partiellement (bezier comme aux extrémités mais pas au milieu par exemple).

entrez la description de l'image ici

Image 4 : Mêmes points de séquences de nœuds différentes. La courbe verte NURBS correspond à une courbe de Bézier qui a une plage de paramètres de 0-2 au lieu de 0-1

Ok alors quels sont les nœuds? Ce sont simplement les plages des fonctions de base. Comme la b-spline cubique à 4 points a 4 fonctions d'interpolation, elle a besoin de 8 nœuds. Seules les zones où 3 fonctions se chevauchent et totalisent 1,0 peuvent tracer une ligne.

entrez la description de l'image ici

Image 5 : 2 fonctions de base différentes, une configuration de type Bézier et une segmentation uniforme, réparties sur la plage 0-1.

Et maintenant, nous avons surtout décrit la réponse à la question 1. La plage n'est pas définie, vous pouvez étirer les fonctions de base comme bon vous semble. Enfin, le vecteur de nœud produit simplement les plages de paramètres pour les fonctions de base. Il y a encore une chose qui régit la forme de la courbe et c'est le vecteur de poids. Mais c'est une autre histoire à raconter ailleurs.


* Ce rationnel dans ce cas signifie qu'une courbe NURBS ne doit pas nécessairement être un polynôme, car vous ne pouvez pas décrire un cercle avec des polynômes.

** On peut définir d'autres types de points.

joojaa
la source
en ce qui concerne (*), les courbes de Bézier ont le même problème. Le problème est que les courbes (dans les deux cas) sont définies comme x = f (t), y = f (t). Cependant, vous pouvez également définir une courbe unidimensionnelle / explicite / 1 dimensionnelle (encore une fois, dans les deux cas) comme y = f (x), en utilisant x à la place de t. Dans le cas de courbes rationnelles, au lieu de pouvoir représenter des sections coniques, vous pouvez représenter le sinus et le cosinus (et plus bien sûr). Les NURBS / b-splines ne sont pas spéciaux à cet égard.
Alan Wolfe
Je pense que votre déclaration sur la longueur est erronée (ne fonctionne qu'avec des fonctions linéaires?), Et je ne sais pas comment les calculs de longueur sont censés s'insérer dans votre explication (bonne information que vous avez donnée, juste en disant!)
Alan Wolfe
@AlanWolfe supprimé quand même
joojaa
Le plus impressionnant! Merci beaucoup, très bonne explication!
Ecir Hana
Typo peut-être? "Au lieu de cela, la surface sous-jacente a une plage de paramètres personnalisable. Le paramètre est stocké dans quelque chose appelé un nœud, et chaque nœud peut avoir une valeur arbitraire plus grande que la suivante." -> "Au lieu de cela, la courbe sous-jacente a une plage de paramètres personnalisable. Le paramètre est stocké dans quelque chose appelé un nœud, et chaque nœud peut avoir une valeur arbitraire plus grande que la précédente ." Btw., Pourriez-vous préciser ce que vous entendez par "plage UV"? "UV" implique 2D ..?
Ecir Hana