B-Splines/fr

Cette page décrit comment utiliser les B-splines dans FreeCAD. Elle donne également des informations de base sur ce que sont les B-splines et pour quelles applications elles sont utiles.

Objectif
Si vous connaissez déjà les B-splines et leur application, vous pouvez aller directement à la section B-splines dans FreeCAD.

Supposons que vous vouliez concevoir une pièce qui doit être produite avec une imprimante 3D. La pièce doit avoir un bord de cette façon :



Vous devez imprimer la pièce dans le sens du bas vers le haut de l'esquisse. Les structures de support extérieures peuvent ne pas être une option. Vous devez donc ajouter un support directement à votre pièce. Quelles sont vos options ?


 * Option 1 : vous pourriez ajouter une ligne du point (20, 0) au point (80, 40) :



Cependant, cette solution nécessite beaucoup de volume, donc de poids et de matériaux.


 * Option 2 : vous pouvez relier les deux points par un arc de cercle. Pour gagner du volume, l'arc doit se terminer tangentiellement au point (80,40). Votre solution ressemble alors à ceci :



OK. Mais au fond, vous n'avez pas besoin d'un soutien immédiat.


 * Option 3 : vous pourriez économiser un peu plus de volume si la connexion entre les 2 points est une courbe qui commence tangentiellement à (0, 20) et se termine tangentiellement à (80, 40) :



Ainsi, une courbe avec laquelle vous pouvez relier deux points tangentiellement à un point de référence peut être très utile pour les constructions. Les courbes de Bézier offrent cette fonctionnalité.

Origine
Les courbes de Bézier sont des polynômes permettant de décrire la liaison entre 2 points. Le polynôme le plus simple reliant 2 points est une droite ($$A*x^1+B$$) donc les courbes de Bézier linéaires sont aussi des segments de droite :



Cependant un polynôme devient d'abord utile quand on peut le contrôler. Il doit donc y avoir un point entre les deux extrémités qui nous permet de définir comment les extrémités sont connectées. Comme dans l'exemple ci-dessus, option 3, la courbe est utile lorsqu'elle commence et se termine tangentiellement aux lignes qui croisent les points d'extrémité. C'est l'une des principales caractéristiques des courbes de Bézier. Ajoutons donc un point de contrôle entre les deux extrémités. La courbe commencera tangentiellement vers ce point de contrôle, ce qui signifie qu'elle est tangente à la ligne que nous pouvons tracer entre le point de départ et le point de contrôle. En reculant à partir du point d'extrémité, la courbe sera également tangente à la ligne que nous pouvons tracer entre le point de contrôle et le point d'extrémité. L'animation 2 montre à quoi ressemble une telle courbe.



L'animation montre clairement ce qu'est la courbe - une transition de P0 à P2 en faisant pivoter la ligne P0-P1 pour qu'elle devienne la ligne P1-P2. Nous obtenons ainsi la caractéristique de début/fin tangentielle.

Une telle courbe ne peut être décrite que par un polynôme quadratique. (Le nombre de tours gauche/droite + 1 est l'ordre polynomial nécessaire. Un polynôme quadratique a un seul tour, un polynôme cubique a deux tours et ainsi de suite). Par conséquent, une courbe de Bézier avec un point de contrôle est une courbe de Bézier quadratique (deuxième ordre).

Avoir un seul point de contrôle n'est souvent pas suffisant. Prenons l'exemple de la simulation ci-dessus. Dans l'option 3, nous terminons la courbe de manière tangentielle dans la direction x. Mais comment relier les points (20, 0) et (80, 40) pour que la courbe se termine de manière tangentielle dans la direction des y ? Pour y parvenir, il faut d'abord un virage à droite, puis un virage à gauche, donc un polynôme cubique (du troisième ordre). Et cela signifie que pour une courbe de Bézier, nous avons besoin (ou nous pouvons dire que nous gagnons) un deuxième point de contrôle. L'animation 3 montre une courbe de Bézier cubique.



Pour répondre à la question, la solution avec la terminaison tangentielle de la direction y pour l'exemple est celle-ci :



Règles
Dans le texte ci-dessus, vous avez peut-être déjà remarqué quelques "règles" pour les courbes de Bézier :
 * Le degré polynomial est aussi le degré des courbes.
 * Si vous avez besoin de $$n$$ tours, vous avez besoin d'au moins une courbe de Bézier de $$n+1$$ degré.
 * Une courbe de Bézier commence toujours tangentiellement à la ligne entre le point de départ et le premier point de contrôle (et se termine tangentiellement à la ligne entre le dernier point de contrôle et le point d'arrivée).

Math
Si vous souhaitez comprendre le contexte mathématique, voici l'essentiel.

Une courbe de Bézier est calculée à l'aide de cette formule :

$$\quad \textrm{Bezier}(n,t)=\sum_{i=0}^{n}\underbrace{\binom{n}{i}}_{\text{terme polynomial}}\underbrace{\left(1-t\right)^{n-i}t^{i}}_{\text{terme polynomial}}\; \underbrace{P_{i}}_{\text{coordonnée du point}} $$

n est ici le degré de la courbe. Ainsi une courbe de Bézier de degré n est un polygone d'ordre n. Les facteurs $$P_{i}$$ sont ici en fait les coordonnées des points de contrôle des courbes de Bézier. Pour une visualisation, voir Contrôle des courbures de Bézier.

Si vous souhaitez en savoir plus, consultez le site Les mathématiques des courbes de Bézier qui présente une origine joliment animée des mathématiques des courbes de Bézier.

Fondamentaux
Cette vidéo énumère au début les problèmes pratiques que posent les courbes de Bézier. Par exemple, l'ajout ou la modification d'un point de contrôle change toute la courbe. Ces problèmes peuvent être résolus en joignant plusieurs courbes de Bézier. Le résultat est ce qu'on appelle une spline, en particulier une B-spline (basic spline). La vidéo explique également qu'une union de courbes de Bézier quadratiques forme une B-spline quadratique uniforme et qu'une union de courbes de Bézier cubiques forme une B-spline cubique uniforme.

A partir des vidéos, nous pouvons rassembler des "règles" utiles pour les B-splines :
 * Le premier et le dernier point de contrôle sont les points de début et de fin de la spline.
 * Comme pour les courbes de Bézier, les splines commencent toujours tangentiellement à la ligne entre le point de départ et le premier point de contrôle (et se terminent tangentiellement à la ligne entre le dernier point de contrôle et le point final).
 * Une union de $$S$$ courbes de Bézier de degré $$D$$ possède $$S+D$$ points de contrôle.
 * Puisque l'on travaille dans la plupart des cas avec des B-splines cubiques, nous pouvons alors affirmer que $$N$$ points de contrôle conduisent à $$N-3$$ segments de Bézier et à leur tour à $$N-4$$ points de jonction des segments.
 * Une B-spline de degré $$D$$ offre en tout point une dérivée d'ordre $$D-1$$ continue.
 * Pour une B-spline cubique, cela signifie que la courbure (dérivée de second ordre) ne change pas lors du passage d'un segment au suivant. C'est une caractéristique très utile comme nous le verrons plus tard.

Si vous souhaitez en savoir plus sur les propriétés des B-splines, regardez la vidéo MOOC Curves 8.2 : Propriétés des courbes B-spline.

Basis
Since we will only introduce the basics of B-spline, we don't go here into the details.

The basis constructs the spline. Looking at the definition of Bézier curves in section Math we remember that a Bézier curve is a linear combination of polynomials with the x/y coordinate of each of the control points as a factor. These polynomials are called Bernstein polynomials.

As several Bézier curves are combined to form a spline, we get a set of Bernstein polynomials forming the spline (they are the basis). As we want to overcome the mentioned limitations of Bézier curves, we don't geometrically combine the different Bernstein polynomials of the Bézier curves, but define Bernstein polynomials over the whole geometrical range of the spline. So we don't combine the Bézier curves with its Bernstein polynomials, which would be
 * $$\textrm{Bezier-combination}=\begin{cases}

\sum_{i=0}^{n}P_{i}\cdot B_{i,n}(t), & 0\le t\le1\\ \sum_{i=0}^{n}P_{i+n}\cdot B_{i,n}(t-1), & 1\le t\le2\\ \cdots \end{cases}$$

whereas $$B_{i,n}(t)$$ is the i-th Bernstein polynomial with order $$n$$ and the coefficients $$P_{i}$$ are the point coordinates of the Bézier curve control points. But we use a different set of functions that are defined over the whole spline range:
 * $$\textrm{B-spline}= \sum_{i=0}^{n}p_{i}\cdot N_{i,n}(t)$$.

Note that in general $$N_{i,n}(t) \ne B_{i,n}(t)$$, and the Bezier control points $$\{P_1, P_2,\dots\}$$ are different from B-spline control points $$\{p_1, p_2,\dots\}$$.

The different $$N_{i,n}(t)$$ are defined piecewise where the interval of every piece is the interval of the Bézier piece. When the lengths of all $$N_{i,n}$$ pieces is equal, we speak of a uniform spline. (In literature this is often denoted as equal travel time $$t$$ per piece.)

To understand how the $$p_{i}$$ are the coordinates of the B-spline control points, see the first minute of this video.

Knot vector
As derived above, B-splines are created out of $$N_{i,n}$$ piecewise polynomials with continuity up to a certain derivative between the pieces. The endpoints of the piece's definition interval are called knots. For a spline defined over $$k$$ pieces, there are $$k+1$$ knots given by the so-called knot vector: $$\{t_0, t_1, t_2,\dots, t_k\}$$ whereas $$ t_0 < t_1 < t_2 < \dots < t_k$$

The knot vector comprises the knots of the $$N_{i,n}$$ basis functions that define the B-spline, see this video. The basis functions of a B-spline can be calculated using the knot vector and a creation algorithm, see this video.

The derivative until which continuity exists is given by the multiplicity $$m$$. Therefore we can specify a vector with the multiplicity for every knot: $$\{m_0, m_1,\dots, m_k\}$$. A knot on a spline with degree d and the multiplicity m tells that the curve left and right to the knot has at least an equal n order derivative (called Cn continuity) whereas $$n=d-m$$.

B-splines non-uniformes
Une propriété des polynômes de Bernstein est que lorsque l'on regarde les différentes parties de Bézier S-spline, la longueur du chemin de chaque partie est la même. (La longueur du chemin est souvent appelée le temps de parcours). Comme vous pouvez l'imaginer, il peut être utile d'avoir des B-splines dont les parties de Bézier ont des longueurs de chemin différentes. Ceci peut être réalisé en pondérant les différents polynômes :

As described above the parameters of the knots are described by the knot vector. So the knot vector stores the definition intervals. When now one piece gets another interval, also the knot vector changes, see this video for a visualization.

Rational B-splines
A further generalization can be made for B-splines by introducing weights for the control points. This way it can be controlled "how important" a control point is.

The equation for such a spline is

$$\quad c(t)=\cfrac{\sum_{k=0}^{N}p_{k}B_{k, D}(t)w_k}{\sum_{k=0}^{N}B_{k, D}(t)w_k} $$

Notice that the function is no longer a polynomial, but a rational function, and these splines are called rational B-splines. Observe that when all $$w_i$$ are equal, the equation reduces to a regular non-rational B-spline. So non-rational B-splines are a subset of rational B-splines.

Ces B-splines non uniformes et rationnelles (à cause de la division) sont souvent appelées NURBS. En regardant leur formule, on voit qu'elles sont en fait une B-spline avec une base pondérée $$R_{k, D}(t)$$ :

B-splines dans FreeCAD
FreeCAD propose de créer des B-splines uniformes ou non-uniformes de n'importe quel degré en 2D via l'atelier Sketcher.

Création
Pour créer des B-splines, allez dans une esquisse et utilisez le bouton de la barre d'outils. Ensuite, faites un clic gauche pour définir un point de contrôle, déplacez la souris en faisant un clic gauche pour définir le point de contrôle suivant et ainsi de suite. Enfin, cliquez avec le bouton droit de la souris pour terminer la définition et créer la courbe B-spline.

Par défaut, des splines cubiques uniformes sont créées, sauf qu'il n'y a pas assez de points de contrôle pour le faire. Ainsi, lorsque vous créez une B-spline avec seulement 2 points de contrôle, vous obtenez bien sûr une spline qui est une simple courbe de Bézier linéaire, pour 3 points de contrôle vous obtenez une courbe de Bézier quadratique, puis avec 5 points de contrôle vous obtenez une B-spline cubique composée de 2 segments de Bézier.

Pour créer des B-splines périodiques (B-splines qui forment une courbe fermée), utilisez le bouton de la barre d'outils. Il n'est pas nécessaire de placer le dernier point de contrôle sur le premier car la courbe B-spline sera automatiquement fermée :



Les B-splines peuvent également être générées à partir de segments d'esquisse existants. Pour ce faire, sélectionnez les éléments et appuyez sur le bouton de la barre d'outils.

Lors de la création d'une courbe B-spline, son degré peut être spécifié en appuyant sur la touche. Ceci permet d'annuler l'option par défaut qui consiste à créer une courbe B-spline cubique si possible.

Changer le degré
Pour modifier le degré, sélectionnez la plaine B et utilisez les boutons de la barre d'outils ou.

Remarque : diminuer le degré ne peut pas annuler une augmentation antérieure du degré, voir la page Wiki Sketcher Diminuer le degré d'une B-spline pour une explication.

Changer la multiplicité des nœuds
Les points où deux courbes de Bézier sont connectées pour former la B-spline sont appelés nœuds. La multiplicité des nœuds détermine la façon dont les parties de Bézier sont connectées, voir la page Wiki Sketcher Augmenter la multiplicité d'un nœud pour plus de détails.

Pour modifier la multiplicité des nœuds, utilisez les boutons de la barre d'outils ou.

Remarque : la création de deux B-splines connectées l'une à l'autre ne s'unira pas en une seule nouvelle B-spline. Leur point de connexion n'est donc pas un nœud. La seule façon d'obtenir un nouveau nœud dans une B-spline existante est de diminuer le degré. Cependant, vous risquez d'obtenir de nombreux nouveaux nœuds. Le meilleur choix est donc de redessiner la B-spline avec plus de points de contrôle.

Changer le poids
Autour de chaque point de contrôle, vous voyez un cercle jaune foncé. Son rayon définit le poids du point de contrôle correspondant. Par défaut, tous les cercles ont le rayon 1. Cela est indiqué par une contrainte de rayon pour le premier cercle du point de contrôle.

To create a rational B-spline the weights have to be made independent. To achieve that you can delete the constraint that all circles are equal and then set different radius constraints for the circles.

Si aucune contrainte de rayon n'est définie, vous pouvez également modifier le rayon en le faisant glisser :



Dans l'exemple du déplacement, vous voyez qu'un poids élevé attire la courbe vers le point de contrôle, tandis qu'un poids très faible modifie la courbe comme si le point de contrôle n'existait presque pas.

Lorsque vous consultez la fonction de création pour les B-splines rationnelles non uniformes, vous constatez qu'un poids de zéro entraînerait une division par zéro. Par conséquent, vous ne pouvez spécifier que des poids supérieurs à zéro.

Note: When dragging points, knots or widths, the circle diameters denoting the weight will change. This is because the diameter depends on the overall B-spline length for visualization reasons. The actual weight is not changed.

Modification des nœuds
De nouveaux noeuds peuvent être ajoutés en utilisant le bouton.

La suppression des nœuds n'est pas encore possible, voir la section Limitations.

Changing the parameter value of a knot is not yet supported.

Information sur l'affichage
Comme la forme d'une spline B ne renseigne pas beaucoup sur ses propriétés, FreeCAD propose différents outils pour afficher les propriétés :

Limitations
A l'heure actuelle (FreeCAD 0.19), il existe quelques limitations lors de l'utilisation des splines que vous devez connaître :
 * 1) Vous ne pouvez pas définir de contraintes tangentielles. Dans cet exemple Sketcher_spline-limit-tangential.png vous voulez vous assurer que la spline touche la courbe bleue 2 fois tangentiellement. Cela serait utile car la ligne bleue pourrait par exemple être la frontière spatiale de votre dessin.
 * 2) Vous ne pouvez pas insérer un nouveau point de contrôle entre deux points de contrôle existants sélectionnés. Il n'y a pas d'autre moyen que de redessiner la spline.
 * 3) Vous ne pouvez pas supprimer un point de contrôle. Dans ce cas également, vous devez redessiner la spline.
 * 4) Vous ne pouvez pas créer une courbe de décalage pour une spline B en utilisant l'outil Draft Décalage.

Cas d'utilisation typiques
Selon les propriétés des B-splines, il y a 3 cas d'utilisation principaux :
 * 1) Les courbes qui commencent/se terminent tangentiellement à une certaine direction. L'exemple ci-dessus en est un exemple.
 * 2) Les courbes décrivant des conceptions plus larges et offrant la liberté de changements locaux. Voir cette exemple ci-dessous.
 * 3) Les courbes qui assurent une certaine continuité (dérivée). Voir cette exemple ci-dessous.

Conception
Prenons par exemple le cas où vous concevez le boîtier d'un mixeur de cuisine. Sa forme souhaitée doit ressembler à celle-ci :



Pour définir la forme extérieure, il est avantageux d'utiliser une B-spline car lorsque vous modifiez un point de contrôle pour changer la courbure du bas, la courbure du côté et du haut ne sera pas modifiée :



Continuité aux transitions géométriques
Il existe plusieurs cas où il est physiquement nécessaire d'avoir une certaine continuité de surface aux transitions géométriques. Prenons par exemple les parois internes d'un canal de fluide. Lorsque le diamètre du canal change, on ne veut pas avoir de bord car les bords introduiraient des turbulences. Par conséquent, comme dans l'exemple de ci-dessus, on utilise des splines dans ce but.

Le développement des courbes de Bézier a été initialement déclenché par l'industrie automobile française. Outre l'économie de matériaux et la réduction de la traînée du flux d'air, l'aspect des voitures devait également être amélioré. Et lorsque vous regardez le design élégant des voitures françaises des années 60 et 70, vous constatez que les courbes de Bézier ont donné un coup de pouce au design automobile.

Prenons par exemple cette tâche dans la conception des voitures : l'aile de la voiture doit être "belle". Voici un croquis de base de notre tâche :



"Avoir un bel aspect" signifie que le client (potentiel) regarde l'aile et ne voit pas de reflets lumineux inattendus, ni de changements soudains dans les reflets de la peinture automobile. De quoi avez-vous besoin pour éviter les changements dans les reflets ? Regarder attentivement l'aile :



Vous voyez que lorsqu'il y a un bord, il y a une zone spatiale où la lumière réfléchie a moins d'intensité et c'est ce que vous remarquerez en regardant le garde-boue. Pour éviter cela, vous avez besoin d'un changement continu de la pente de vos éléments de surface. La pente est la dérivée de premier ordre et comme expliqué dans la section Fondamentaux, une B-spline du second degré (quadratique) offre en chaque point une dérivée de premier ordre continue.

Mais est-ce vraiment suffisant ? Au point de transition géométrique, nous avons maintenant la même pente des deux côtés, mais la pente peut changer différemment des deux côtés. Nous avons alors cette situation :



Nous avons donc également des zones dans lesquelles l'intensité de la lumière réfléchie est différente. Pour éviter cela, nous avons besoin au point géométrique de transition d'une continuité de la dérivée de second ordre et donc d'une B-spline cubique.