Interpolation de BézierSalut,
Existe-t-il une fonction pour tracer l'interpolation de Bézier ?
Re: Interpolation de 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 dessin (construction et aménagement paysager) et la conception de vêtements. Bien sûr, les fondements mathématiques sont toujours intéressants pour moi.J'ai fait un peu de recherche sur Internet et j'ai trouvé 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 2002 .xls d'une courbe de Bézier avec des routines d'automatisation intégrées pour saisir 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 attrape 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 le post 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 lancé un script pour faire du DSP (traitement du signal numérique) 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 illustre la feuille de calcul Excel avec le graphique Excel avec spline de Bézier et points interpolés, qui ont été ajoutés en tant que points Spin B à la table JMP.La deuxième image montre la ligne JMP GB (courbe) avec les points interpolés Excel superposés.
Excel Interpolated Points > Spin B in JMP tablePoints interpolés Excel > Spin B dans le tableau JMP
JMP 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 JMP (courbe) sur la queue supérieure, cela peut être dû à l'algorithme d'interpolation, aux différences entre les courbes Excel et JMP ou à une combinaison des deux. Notez que 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 élevé, 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 masqué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. Cependant, pour des raisons de précision, des intervalles de données réguliers et une répétition 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 variable (ou plus) influençant à la fois X et Y. Par exemple, les deux sont des lectures d'une lecture de test quotidienne ou hebdomadaire.
- Existe-t-il un premier principe fondamental, sous-jacent à la relation de 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, il 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, en particulier 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 spline de courbe 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 de 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 splineextrait d'un pdf décrivant comment choisir la pente pour les premier et dernier points d'extrémité d'une spline
Je soupçonne que 1 ou 4 pourraient s'appliquer ici; Je suis au-delà de mes connaissances.
Re: Interpolation de 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 dessiner une courbe de Bézier passant par les quatre points. Y-a-t-il un moyen de faire ça?
Re: Interpolation de 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'adapter une cubique aux quatre points et d'utiliser la formule pour effectuer l'interpolation.
Nous aurons peut-être la réponse d'un statisticien.
Graph Builder can do it. So can Fit Y by X.Graph Builder peut le faire. Alors peut Fit Y par X.
Re: Interpolation de BézierJe m'excuse pour la confusion ici.
Données:

Dans JMP, j'ai fait Fit Y by X


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

j'ai compris

Remarquez que dans la ligne verte JMP, il y a une légère oscillation/pli 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 de BézierPenser à @gzmorgan0 explication, vous pouvez le faire dans le générateur de graphes :
Select Points, then SHIFT to add the lineSélectionnez Points, puis SHIFT pour ajouter la ligne
Re: Interpolation de Bézier@mitulshah ,
Il serait utile que vous ajoutiez 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 la série 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.
- Fit Y by X, fit Flexible, Kernel Smoother Linear Tri-Cube, serait l'option que j'utiliserais à la place d'une spline, en supposant que vous vouliez 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, il n'était pas clair pour moi ce que vous recherchez.

Re: Interpolation de BézierC'est ce que j'essaie de faire
Reproduisez 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 ce 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 de 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 ajuster une spline à un ensemble de points et vous propose un curseur pour définir la rigidité de la spline.
this spline is very stiffcette spline est très raide
Edit : mauvaise légende ! PAS très raide !
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 de BézierSalut Craige,
J'essaie de comprendre la fonction path () et de déplacer des points, des points de contrôle, des points de Bézier.
J'ai ces quatre points à partir des données que j'ai
pointe =
[ 0,93 77,04 1,
1,37 155,22 0,
1,96 390,46 0,
2,41 846,87 3] ;
Lorsque je mets ceci dans la fonction path, j'obtiens une ligne entre le point 1 et le point 4, mais elle ne passe pas par les points 2 et 3. Est-ce que je manque quelque chose?
Merci.
Re: Interpolation de BézierPlusieurs réponses, selon ce que vous devez faire. Voilà quelque.
Pour les graphiques 2D, vous pouvez utiliser la fonction de chemin. Vous ne pouvez pas le trouver en recherchant Bézier car l'index de script l'épelle 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 les points 3 et 5 également. (Pas fait, ça devrait être facile.)
Bezier control pointsPoints de contrôle de Bézier
Peut-être avez-vous besoin d'une spline. Je ne sais pas quelle est la distinction entre spline, p-spline, b-spline dans l'index de script. j'ai utilisé spline HeatColor vs Spline vs Interpolation faire cette courbe
spline coef, spline evalspline coef, spline eval
Les splines de Bézier sont également prises en charge dans la prise en charge OpenGL 3D de JMP : https://www.jmp.com/support/help/14-2/bezier-curves.shtml qui pourrait aider à dessiner une surface. Un mauvais exemple est caché 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