Aide concernant la page "spline_math_curve.html
Il y a quelques dizaines d’années,
j’ai appris ce que sont les fonctions splines de degrés 3 et j’ai écrit des programmes
qui les utilisent pour faire passer une courbe par des points données dans un plan.
J’attends depuis longtemps que de telles courbes soient implémentées dans des logiciels tels
qu’Inkscape
et FreeCAD.
J’ai vu fin décembre 2022 sur Youtube l’excellente vidéo de Freya Holmér qui se nomme :
"The continuity of Splines" de Freya Holmér.
C.f. : https://www.youtube.com/watch?v=jvPPXbo87ds
Malheureusement, la courbe que je nommerais "Math-spline",
basées sur les fonctions splines et que j’ai implémenté dans la page Web : https://www.juggling.ch/gisin/bgweb/aprod2000_perso/spline_math_curve.html
n’est pas décrite par Freya Homér ni utilisée dans les logiciels que je connais.
Voici quelques caractéristiques de cette courbe "Math-spline" :
° continu
° de tangente variant de manière continue le long de la courbe, elle est G1
° de rayon de courbure variant de manière continue le long de la courbe, elle est G2
° passe par tous les points donnés
° ne nécessite aucun point supplémentaire pour définir la courbe
° peut facilement être fermée
° peut avoir des points de brisures, donc où la tangente varie de façon discontinue
° l’influence des points se fait pratiquement sur les 8 segments voisins du point
° est invariante par rotation, symétrie et homothétie.
° est facile à calculer, rapidement
Explications de quelques fonctionnalités de la page d'implémentation
Cette page ne sert à rien d'autre qu'à faire des tests sur la génération de courbe passant par des points donnés
et utilisant les fonctions splines.
J'aimerai beaucoup que de telles courbes puissent être générées dans des logiciels tels
qu'Inkscape et
FreeCAD.
L'illustration de génération d'une courbe passant par des points donnés se fait en 2 dimensions,
dans un canvas de 800x800.
Évidemment, on peut généraliser la manière de faire à des courbes passant par des points définie dans
un espace à 3 dimensions et même dans un espace de dimensions quelconque.
-
On peut placer divers points en cliquant dans le canevas, avec la touche "Shift" pressée.
-
En cliquant sur un point, on sélectionne le point et la courbe correspondante.
-
On peut effacer le point sélectionné avec le bouton "Delete point".
-
On peut ajouter un point avant le point sélectionner en cliquant et pressant "Ctrl+Shift".
-
G0 donne une courbe continue, mais de tangentes non continues.
Chaque segment est un segment de droite.
Chaque point n'influence que le segment précédent et suivant.
-
G1 donne une courbe don la tangente varie de manière continue.
Les tangentes aux points sont calculées de manières naïves et non optimales.
Chaque point n'influence que les deux segments précédents et le deux suivants.
-
G1 other (best) est comme le cas précédent, sauf que
les tangentes aux points sont calculées de manières plus optimales.
Cette manière est préférable à la précédente.
-
G2 (best) donne une courbe don non seulement la tangente varie de manière continue,
mais également la courbure varie de manière continue.
C'est clairement la manière préférable parmi les 4 proposées.
Chaque point n'influence pratiquement que les quatre segments précédents et les quatre suivants.
Mathématiquement, chaque point influence toute la courbe,
mais cette influence diminue rapidement avec la distance entre le point et le segment concerné.
-
uniform dT = 1 utilise une paramétrisation de la courbe donnant le même temps pour passer d'un point au suivant.
-
distance dependent (better) utilise une paramétrisation de la courbe donnant un temps pour passer d'un point au suivant
qui est égale à la distance en pixels entre les deux points extrémités du segment.
N'est utilisé que dans le choix précédent "G2".
C'est le choix recommandé.
-
dT = length of the segment (less good) utilise une paramétrisation de la courbe donnant un temps pour passer d'un point au suivant
qui est égale à la longueur du segment.
Cela nécessite plus de calculs et ne change presque pas par rapport à la méthode précédente.
N'est utilisé que dans le choix précédent "G2".
Pratiquement, le calcul de la longueur du segment dessiné se fait à chaque fois que la courbe est dessinée.
C'est cette longueur qui est utilisée.
C'est la raison pour laquelle en partant du cas "uniforme dT = 1"
et en passant à ce cas, la courbe peut varier légèrement durant les 3 ou 4 réactualisations du dessin de la courbe.
Pressez le bouton "Rotate" pour actualiser le dessin de la courbe.
-
La question se posait de savoir si le choix des axes pour représenter les points sous forme de couple de nombres
influençait la courbe générée.
La réponse est Non.
Cela se montre mathématiquement.
C'est également testé en acceptant de faire subir une transformation linéaire aux points ou à la courbe.
T11 à T22 donne les coefficients de la matrice de la transformation linéaire.
Le bouton "Rotate" permet de générer une matrice de rotation.
Les cases à cochées suivantes permettent d'afficher des courbes ayant subies la transformation linéaire.
-
Clone points, génère une copie des points de la première courbe,
qui subissent la transformation linéaire, puis la courbe "Math-spline" correspondante à ces points est générée.
-
Clone curve, génère une copie de la première courbe,
puis elle subit la transformation linéaire.
Si la transformation linéaire est une rotation, une symétrie ou une homothétie,
les deux cas de clonages donnent exactement la même courbe,
ce qui montre l'indépendance du choix des axes.
Pour une transformation linéaire plus générale,
si le cas où dT = 1 est choisi, les deux courbes restent les mêmes.
si uu autre cas est choisi, les deux courbes peuvent être différentes.
Cela provient du fait que la distance entre les points n'est plus préservé.
-
Closed curve, permet de fermer la courbe actuellement sélectionnée.
-
Broken point, permet de générer une brisure au point sélectionné.
Dans ce cas, la tangente en ce point ne varie plus de manière continue.
Ces points sont, comme le premier et le dernier point, caractérisés par le fait que
la dérivée seconde des composantes X(t) et Y(t) de la courbe sont de dérivée seconde nulle.
-
Sound on, permet d'activer ou de désactiver un son lors d'un clique sur un point.
-
Click to add a spline with .... Points.
Ce bouton permet de générer une courbe "Math-spline" ayant le nombre de points demandé.
Pour tester que la génération de courbes "Math-spline" fonctionne rapidement,
on peut générer une courbe contenant des milliers de points,
pour constater que le calcul et l'affichage se fait en une fraction de seconde.
À partir d'environ 10'000 points, le calcul est plus lent et se fait nettement sentir.
On peut également utiliser ce bouton pour générer des courbes n'ayant que quelques points,
pour comparer diverses courbes.
Seule la première courbe peut être clonée.
Pour plus d'information, en particulier sur les mathématiques et l'algorithmique, c.f.
Version française .pdf et .odt
Version traduite automatiquement en anglais .pdf et .docx
avec Google Translate.
J'ai également fait des tests sur des fonctions splines,
dans la page Web : spline_function.html.
Dans cette page Web, vidéos Youtube en français sur ce sujet.
Plan du Site :
Home
bgweb.html
aprod2000_perso.html
spline_math_curve.html
spline_math_curve_help_fr.html
Page mise à jour le 20 janvier 2023 par Bernard Gisin
( Envoyer un e-mail )
Hébergement par : www.infomaniak.ch