Interpolation de BézierSalut,
Existe-t-il une fonction pour tracer l'interpolation de Bézier ?
Re: Interpolation Bézier@Craige_Hales et @mitulshah ,
Ma connaissance et mon expérience des courbes de Bézier sont limitées. J'ai vu leur utilité dans la conception de dessins (construction et aménagement paysager) et la conception de vêtements. Bien sûr, les fondements mathématiques m’intéressent toujours.J'ai fait quelques recherches sur Internet et j'ai découvert que @mitulshah La quête de l'algorithme spline de Bézier, B-spline, d'Excel est courante. Un lien Question sur l'algorithme de lissage Excel inclus le lien vers un fichier zip : http://xlrotor.com/Smooth_curve_bezier_example_file.zip Ce zip contient un exemple .xls 2002 d'une courbe de Bézier avec des routines d'automatisation intégrées pour récupérer les pixels de la courbe lissée Excel et interpoler les points sur la courbe.Ce n'est pas "exact" et utilise une technique qui récupère 4 pixels de la courbe. Le point final est utilisé deux fois dans le premier point interpolé et le dernier point interpolé.
Une découverte JMP que j'ai faite après l'article de Craige sur l'option d'élément GraphBuilder Line pour en faire une courbe, est que la spline utilisée pour cette plate-forme doit utiliser un algorithme différent car les pentes des points finaux sont très similaires à celles d'Excel. J'ai démarré un script pour faire du DSP (traitement numérique du signal) en extrayant les pixels du tracé GB. Ensuite, j'ai trouvé les liens Web répertoriés ci-dessus et j'ai décidé d'utiliser simplement les points interpolés de la feuille de calcul Excel et de les superposer avec la ligne GB (courbe). La première capture d'écran ci-dessous représente la feuille de calcul Excel avec le graphique Excel avec la spline de Bézier et les points interpolés, qui ont été ajoutés en tant que points Spin B au tableau JMP.La deuxième image montre la ligne (courbe) JMP GB avec les points interpolés Excel superposés.
Excel Interpolated Points > Spin B in JMP tableExcel Interpolated Points > Spin B in JMP tablePoints interpolés Excel > Spin B dans le tableau JMP
JMP Line(curve) spline overlaid with Excel interpolationsJMP Line(curve) spline overlaid with Excel interpolationsSpline de ligne (courbe) JMP superposée avec des interpolations Excel
Vous remarquerez que les interpolations sont légèrement décalées par rapport à la ligne (courbe) JMP sur la queue supérieure, cela pourrait être dû à l'algorithme d'interpolation, aux différences entre les courbes Excel et JMP ou à une combinaison des deux. Notez que dans ces mêmes 4 points sont légèrement supérieurs à la courbe du graphique Excel.
Donc, ma conclusion est que la spline JMP GB Line (courbe) est très similaire à la courbe Excel de Bézier.Mon intérêt n'est pas grand, mais si je m'ennuie, je pourrais terminer mon script DSP pour "obtenir" les points de ligne (courbe).Les versions antérieures de JMP rapportaient les points de courbe dans les fichiers .jrn enregistrés. Désormais, seule une référence à une fonction cachée se trouve dans le fichier .jrn.
Maintenant, si je consultais sur ce problème, ma première série de questions serait :
- D'où viennent ces données (4 points) et quel est l'objectif ?
- Les courbes splines, comme les lignes et les polynômes, peuvent être utiles pour créer des courbes d'étalonnage (courbes à utiliser pour l'interpolation) à la place de relations fonctionnelles complexes. Toutefois, à des fins de précision, des intervalles réguliers de données et une réplication sont recommandés si des interpolations doivent être calculées à partir des courbes. Étant donné que les valeurs X sont irrégulièrement espacées, je me demande s'il existe une troisième (ou plus) variable influençant à la fois X et Y. Par exemple, les deux sont des lectures d'un test quotidien ou hebdomadaire.
- Existe-t-il un premier principe fondamental qui sous-tend la relation entre X et Y, par exemple : dose-réponse ; la croissance cellulaire; contamination-corrosion, etc.
- Pourquoi si peu de points ? Quel est le coût de la réplication ?
D'après mon expérience, s'il existe une relation non linéaire sous-jacente fondamentale, cela vaut souvent la peine d'obtenir les données et d'ajuster la relation pour estimer les paramètres (courbes d'apprentissage, courbes de dégradation), etc. Comme le montrent les excellentes informations fournies par Craige Hales, de petites différences dans les points de contrôle (nombre et emplacement), les nœuds et les points d'extrémité peuvent faire de grandes différences dans la courbure (points sur la courbe) d'une spline, notamment avec de grands écarts en "x".J'ai l'impression qu'Excel n'a délibérément pas publié de points ou de formule pour leur courbe spline afin que les gens ne l'utilisent pas comme un modèle ajusté pour l'estimation.Notez qu'avec des valeurs "proches" de X et de réplication, l'interpolation est beaucoup moins risquée.
Re: Interpolation Bézierhttp://users.umiacs.umd.edu/~ramani/cmsc460/Lecture9_interp_2008.pdf dit
snip of a pdf describing how to choose slope for first and last end points of a splinesnip of a pdf describing how to choose slope for first and last end points of a splineextrait d'un pdf décrivant comment choisir la pente pour le premier et le dernier point d'extrémité d'une spline
Je soupçonne que 1 ou 4 pourraient s'appliquer ici ; Je dépasse mes connaissances.
Re: Interpolation BézierOui. J'espère ça.
Une autre façon de procéder -> peut-être pouvons-nous calculer le point de contrôle en fonction des quatre points connus que j'ai sur la courbe, puis tracer une courbe de Bézier passant par les quatre points. Y-a-t-il un moyen de faire ça?
Re: Interpolation BézierLa spline choisit une pente au début et à la fin qui ne semble pas être la même pour JMP et Excel. La spline utilise un cube différent entre chaque paire de points et peut joindre en douceur un grand nombre de points, en faisant correspondre les pentes et les courbures. Si vous n'avez que quatre points, il peut être judicieux d'ajuster une cubique aux quatre points et d'utiliser la formule pour effectuer l'interpolation.
Peut-être aurons-nous la réponse d'un statisticien.
Graph Builder can do it. So can Fit Y by X.Graph Builder can do it. So can Fit Y by X.Graph Builder peut le faire. Il en va de même pour Fit Y par X.
Re: Interpolation BézierJe m'excuse pour la confusion ici.
Données:

Dans JMP, j'ai fait Ajuster Y par X


Si je saisis les mêmes données dans Excel

j'ai compris

Remarquez dans la ligne verte JMP qu'il y a une légère oscillation/pliure dans la courbe en bas à gauche (entre les valeurs X 2-3), alors que dans Excel, ce n'est pas le cas.
mon objectif final est d'interpoler les valeurs de la ligne, donc si Excel et JMP donnent deux lignes différentes, je me retrouverais avec des valeurs d'interpolation différentes.
Re: Interpolation BézierEn pensant à @gzmorgan0 explication, vous pouvez le faire dans le générateur de graphiques :
Select Points, then SHIFT to add the lineSelect Points, then SHIFT to add the lineSélectionnez Points, puis SHIFT pour ajouter la ligne
Re: Interpolation Bézier@mitulshah ,
Il serait utile que vous joigniez le graphique Excel que vous attendez.
Si j'utilise les données (séries) que vous avez fournies, sans les trier, Excel crée le premier graphique ci-dessous. Si je trie les séries dans Excel, le deuxième graphique est le résultat.
Noter que
- Les plates-formes JMP ajustent par défaut une courbe aux données par valeur et non par ordre dans le tableau.
- Ajuster Y par X, ajuster le tri-cube linéaire flexible et plus lisse du noyau, serait l'option que j'utiliserais à la place d'une spline, en supposant que vous souhaitiez un tracé comme le deuxième tracé ci-dessous.
- Pour produire un tracé comme le premier graphique ci-dessous où la courbe représente l'ordre des données, vous devrez créer un script pour un chemin, comme @Craige_Hales mentionné précédemment.
D'après votre réponse, je ne comprends pas clairement ce que vous recherchez.

Re: Interpolation BézierC'est ce que j'essaie de faire
Répliquez le nuage de points d'Excel avec une fonction de courbe lisse.
Si j'utilise JMP fit Y by X avec une colonne vertébrale flexible, j'ai une courbe différente de celle qu'Excel produit avec un nuage de points + une ligne lisse. Je crois qu'Excel utilise l'ajustement de la courbe de Bézier.
Points de données:
Tourner | X | Oui
Un | 2.41 | 846.8692
Un | 0,93 | 77.043
Un | 1.37 | 155.2193
Un | 1,96 | 390.4639

Je ne veux pas tracer cette ligne en utilisant une spline flexible, mais je veux forcer la courbe de Bézier. J'espère que cela à du sens.
Merci
Re: Interpolation BézierQu'essayez-vous de faire?
Le Wikipédia l'article est plutôt bien. Les points de contrôle ne se situent généralement pas sur la courbe de Bézier.
JMP peut adapter une spline à un ensemble de points et vous propose un curseur pour définir la rigidité de la spline.
this spline is very stiffthis spline is very stiffcette cannelure est très rigide
Edit : mauvaise légende ! PAS très rigide !
regarde aussi Comment voir l'équation utilisée pour la spline ? et régression spline cubique et Comment la ligne lisse dans le générateur de graphiques est-elle déterminée
Re: Interpolation BézierSalut Craige,
J'essaie de comprendre la fonction path() et de déplacer les points, les points de contrôle, les points de Bézier.
J'ai ces quatre points à partir des données dont je dispose
point =
[ 0,93 77,04 1,
1,37 155,22 0,
1,96 390,46 0,
2,41 846,87 3] ;
Lorsque je mets cela dans la fonction path, j'obtiens une ligne entre le point 1 et le point 4, mais elle ne passe pas par le point 2 et le point 3. Est-ce que j'ai raté quelque chose ?
Merci.
Re: Interpolation BézierPlusieurs réponses, selon ce que vous devez faire. Voilà quelque.
Pour les graphiques 2D, vous pouvez utiliser la fonction path. Vous ne pouvez pas le trouver en recherchant Bézier car l'index de script l'écrit Bézier. Essayez Zier à la place.@XanGregg @sheila_loring
Cet exemple étend l'exemple d'index de script avec des poignées déplaçables.
// initial data; points 3 and 5 are not initially constrained about point 4
points = [
10 10 1,// move-to
30 70 0,// control point
40 10 0,// control point
50 40 3,// bezier
60 60 0,// control point
70 20 0,// control point
90 10 3 // bezier
];
// moving a square handle will call this function to
// copy the handle coordinates to the matrix
setpoint = Function( {index, x, y}, // parameters
{angle, distance}, // local variables
// copy to the matrix
points[index, 1] = x;
points[index, 2] = y;
// 3 and 5 are constrained about 4, comment out to see why...
// if the angles don't match, it isn't smooth
If( index == 3 | index == 5,
other = If( index == 3, 5, 3 ); // if I'm 3, he must be 5, etc
// trig in radians, 2*pi is 360
// atan does all 4 quadrants with 2 arguments
angle = ATan( points[index, 2] - points[4, 2], points[index, 1] - points[4, 1] );
// maintain other's distance
distance = Sqrt( (points[other, 2] - points[4, 2]) ^ 2 + (points[other, 1] - points[4, 1]) ^ 2 );
// fix other's angle to match my angle, but opposite me
points[other, 1] = points[4, 1] + distance * Cos( angle + Pi() );
points[other, 2] = points[4, 2] + distance * Sin( angle + Pi() );
);
// redraw
gb << inval;
);
New Window( "Example",
gb = Graph Box(
Fill Color( "blue" );
// there is no good shortcut for creating handles; the JSL holds the instances
Handle( points[1, 1], points[1, 2], setpoint( 1, x, y ) );
Handle( points[2, 1], points[2, 2], setpoint( 2, x, y ) );
Handle( points[3, 1], points[3, 2], setpoint( 3, x, y ) );
Handle( points[4, 1], points[4, 2], setpoint( 4, x, y ) );
Handle( points[5, 1], points[5, 2], setpoint( 5, x, y ) );
Handle( points[6, 1], points[6, 2], setpoint( 6, x, y ) );
Handle( points[7, 1], points[7, 2], setpoint( 7, x, y ) );
// construction lines
Pen Color( "red" );
Line( {points[1, 1], points[1, 2]}, {points[2, 1], points[2, 2]} );
Line( {points[3, 1], points[3, 2]}, {points[4, 1], points[4, 2]} );
Line( {points[4, 1], points[4, 2]}, {points[5, 1], points[5, 2]} );
Line( {points[6, 1], points[6, 2]}, {points[7, 1], points[7, 2]} );
// the bezier
Pen Color( "black" );
Path( points );
)
);J'ai réalisé que je devais également contraindre le déplacement du point 4 à faire glisser également les points 3 et 5. (Pas fait, ça devrait être facile.)
Bezier control pointsBezier control pointsPoints de contrôle de Bézier
Peut-être avez-vous besoin d'une cannelure. Je ne suis pas sûr de la distinction entre spline, p-spline et b-spline dans l'index de script. J'ai utilisé une spline HeatColor vs Spline vs Interpoler pour faire cette courbe
spline coef, spline evalspline coef, spline evalcoef de spline, évaluation de spline
Il existe également un support pour les splines de Bézier dans le support 3D OpenGL de JMP : https://www.jmp.com/support/help/14-2/bezier-curves.shtml ce qui pourrait aider à dessiner une surface. Un mauvais exemple se cache dans Vidéo FFT
Super article @Duane_Hayes Comprendre les splines cubiques
Quelque chose que j'ai rencontré en cours de route : https://www.tinaja.com/glib/bezconn.pdf