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.

Motivation
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 linéaires :



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 :



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 cette page.

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

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).

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, consultez cette vidéo.

Base
Le nom B-spline signifie Basis spline. Au lieu de former la spline comme une combinaison de courbes de Bézier, l'approche consiste à modéliser la même spline d'une manière différente. L'idée est donc d'utiliser un autre ensemble de polynômes comme base. Une combinaison linéaire de ces polynômes de base $$B_D(t)$$ avec l'ordre $$D$$ forme la B-spline. Cette vidéo explique la transition entre les points de contrôle de Bézier et les fonctions de base polynomiales décrivant la spline. Mathématiquement, nous pouvons décrire une B-spline avec cette formule :

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

Par conséquent, $$p_k$$ est le $$k$$-ème point de contrôle de la B-spline et également un facteur pour le $$k$$-ème polynôme de base $$B_{k, D}(t)$$. Chaque polynôme de base décrit la spline dans une certaine région et, par conséquent, le déplacement d'un point de contrôle n'affecte pas la spline entière. Pour comprendre cela, il est fortement recommandé de jeter un œil à cette vidéo à partir de la minute 2:23.

Comme expliqué dans la vidéo, les polynômes de base sont des polynômes de Bernstein. L'ensemble des polynômes de base pour une certaine B-spline peut être visualisé de cette façon :



À chaque position de la spline $$t$$, la somme des polynômes est égale à 1 (indiquée par la ligne orange). Au départ, seul le polynôme rouge a une influence puisque tous les autres polynômes sont à 0. À $$t$$ plus grand, la spline est décrite par une combinaison linéaire de différents polynômes de base. Dans l'image ci-dessus, chaque polynôme est supérieur à 1 pour toute la plage $$0 < t < 1$$. Ce n'est pas nécessairement le cas. Comme le montre la vidéo, les polynômes de base ne sont fondamentalement supérieurs à 0 que pour une certaine plage de position de la spline. L'intervalle pour lequel un polynôme de base est supérieur à 0 est décrit par le vecteur nœud. Si vous souhaitez en savoir plus sur le vecteur nœud, consultez le site cette vidéo.

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 :

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

$$w_k$$ est alors le poids du $$k$$-ème point de contrôle. Lorsque les poids ne sont pas égaux, la B-spline est dite non-uniforme.

En particulier lorsque les B-splines doivent être utilisées pour la modélisation 3D, des B-splines normalisées et non uniformes sont nécessaires. La normalisation se fait par une division par les fonctions de base pondérées. Ainsi, lorsque touts les $$w_k$$ sont égaux, nous obtenons une B-spline uniforme, indépendante du poids lui-même :

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

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)$$ :

$$\quad c(t)=\sum_{k=0}^{N}d_{k}R_{k, D}(t) $$

alors que

$$\quad R_{k, D}=\cfrac{B_{k,D}(u)w_k}{\sum_{l=1}^N B_{l,D}(t)w_l} $$

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.

To create periodic B-splines (B-splines that form a closed curve), use the toolbar button. It is not necessary to set the last control point onto the first one because the B-spline will automatically be closed:



B-splines can also be generated out of existing sketch segments. To do this, select the elements and press the the toolbar button.

Changing the Degree
To change the degree, select the B-spline and use either the toolbar button or.

Note: Decreasing the degree cannot revert a prior increase of the degree, see the Wiki page Decrease B-spline degree for an explanation.

Changing the Knot Multiplicity
The points where two Bézier curves are connected to form the B-spline are called knots. The knot multiplicity determines how the Bézier parts are connected, see the Wiki page Increase knot multiplicity for details.

To change the knot multiplicity, use the toolbar buttons or.

Note: Creating two B-Splines that are connected to each other will not unite to a single new B-spline. So their connection point is not a knot. The only way to get a new knot in an existing B-spline is to decrease the degree. However, you may get many new knots. Thus the better choice is to redraw the B-spline with more control points.

Changing the Weight
Around every control point you see a dark yellow circle. Its radius sets the weight for the corresponding control point. By default all circles have the radius 1. This is indicated with a radius constraint for the first control point circle.

To create a non-uniform B-spline the weights have to be non-uniform. To achieve that you can either change the radius constraint of the first control point circle:



or you delete the constraint that all circles are equal and then set different radius constraints for the circles.

If no radius constraint is set, you can also change the radius by dragging:



In the dragging example you see that a high weight attracts the curve to the control point while a very low weight changes the curve so as if the control point does almost not exist.

When you look at the creation function for non-uniform rational B-splines you see that a weight of zero would lead to a division by zero. Therefore you can only specify weights greater than zero.

Display Information
Since the form of a B-spline does not tell much about its properties, FreeCAD offers different tools to display the properties:

Limitations
At the moment (FreeCAD 0.19) there are some limitations when using splines you should know:
 * 1) You cannot set tangential constraints. In this example Sketcher_spline-limit-tangential.png you want to assure that the spline touches the blue curve 2 times tangentially. This would be useful because the blue line could for example be the spatial border for your design.
 * 2) You cannot insert a new control point between two selected existing control points. There is no other way than to redraw the spline.
 * 3) You cannot delete a control point. Also in this case you must redraw the spline
 * 4) You cannot create an offset curve for a B-spline using the tool Draft Offset.

Typical Use Cases
According to the properties of B-splines, there are 3 main use cases:
 * 1) Curves that start/end tangentially to a certain direction. An example for this is the motivation example above.
 * 2) Curves describing larger designs and providing the freedom of local changes. See this example below.
 * 3) Curves providing a certain continuity (derivative). See this example below.

Designing
Take for example the case that you design a housing of a kitchen mixer. Its desired shape should look like this one:



To define the outer form it is advantageous to use a B-spline because when you change a control point to change the curvature at the bottom, the curvature at the side and top will not be changed:



Continuity at Geometric Transitions
There are several cases where it is physically necessary to have a certain surface continuity at geometric transitions. Take for example the inner walls of a fluid channel. When you have a change in the diameter of the channel, you don't want to have an edge because edges would introduce turbulences. Therefore, like in the motivation example above, one uses splines for this purpose.

The development of the Bézier curves was initially triggered by the French car industry. Besides the saving of material and the reduction of the air flow drag, the look of the cars should also be improved. And when you look at the fancy design of French cars from the 60's and 70's you see that the Bézier curves gave car design a boost.

Let's take for example this task in the design of cars: The car fender should "look nice". Here is a basic sketch of our task:



"Looking nice" means that the (potential) customer looks at the fender and does not see unexpected light reflections and also no sudden changes in the reflection from the automotive paint at all. So what do you need to avoid changes in the reflections? Looking closely to the fender:



you see when there is an edge, there is a spatial area where the reflected light has less intensity and this is what you will notice when looking at the fender. To avoid this you need a continuous change in the slope of your surface elements. The slope is the first order derivative and as explained in section Basics, a second degree (quadratic) B-spline offers at every point a continuous first order derivative.

But is this really sufficient? At the point of geometric transition we have now at both sides the same slope, but the slope might change differently at both sides. Then we have this situation:



So we have also spatial areas in which the intensity of reflected light is different. To avoid this, we need at the geometrical point of transition also a continuity of the second order derivative and thus a cubic B-spline.