samedi 2 mai 2020

BlockScad : polynômes de Lagrange

Nous avons déjà présenté deux familles de courbes : celle de Bézier et celles de GrandPierre. Ces courbes sont pratiques et donnent de nombreuses possibilités, cependant il est compliqué de trouver les bons paramètres lorsque l'on veut passer par des points connus.

Dans cet article nous allons préparer une courbe mathématiquement simple, c'est à dire polynomiale, qui passe par trois points connus, en utilisant les polynômes de Lagrange.(voir  https://fr.wikipedia.org/wiki/Interpolation_lagrangienne )

Dans Blockscad nos trois points seront représentés par six paramètres : (Ax,Az) ; (Bx,Bz) ; (Cx,Cz)

Tout d'abord, il nous faut écrire chacun des trois polynômes qui s'annulent pour deux des trois points.

La(i) = (i-Bx)(i-Cx) / (Ax-Bx)(Ax-Cx) On peut remarquer que pour i valant Bx ou Cx ce polynôme sera nul et pour x valant Ax, ce polynôme vaut 1.

Lb(i) = (i-Ax)(i-Cx) / (Bx-Ax)(Bx-Cx). idem ce polynôme est nul pour Ax et Cx

Lc(i) = (i-Ax)(i-Bx)/(Cx-Ax)(Cx-Bx). De la même façon ce polynôme est nul pour Ax et Bx.

Voyons cela sous BlockScad.


Maintenant, il convient d'additionner ces trois polynômes avec les bons coefficients. Comment sont calculés ces coefficients ?
Pour i=Ax, Lb et Lc sont nul et La vaut 1. Il suffit donc pour passer par Az de multiplier par Az. Et de même pour les autres.


Pour passer par quatre points, c'est un peu plus long mais c'est le même principe.

Reprenons, notre système de boucle et de translation pour faire la courbe correspondante. Ne pas oublier que la boucle commence à Ax et fini (par convention) à Cx. Il faudra donc veiller à ce que les trois points soit toujours dans l'ordre croissant des abcisses.




Il ne nous reste plus qu'à faire un petit essai pour voir si cela marche (et tout recommencer sinon, mais cela vous le voyez pas ;-)

En premier temps, dessinons trois points.


Et appliquons les coordonnées de ces trois points à notre polynôme de Lagrange.


Rapidement, passons à une courbe avec 4 points.


Nous avons créé les variables Dx et Dz et nous avons complété les formules de façon assez mécanique. Ne pas oublier de changer la boucle pour qu'elle finisse à Dx.

Nous rajoutons le point vert dans le dessin. Attentions, il faut décaler les points qui ne sont pas dans l'ordre.




Et pour terminer, mais sans explication car le principe est connu, la version à 5 points.




Et pour terminer cet article, voici la courbe qui passe par les précédents points et le point rouge.


Plus le nombre de points augmentent plus la courbe est censée être lissée.