Interpolazione di BézierCIAO,
Esiste una funzione per tracciare l'interpolazione di Bezier?
Ri: interpolazione di Bezier@Craige_Hales E @mitulshah ,
La mia conoscenza ed esperienza delle curve di Bezier è limitata. Ho visto la loro utilità nella progettazione (costruzione e paesaggistica) e nel design dell'abbigliamento. Naturalmente, le basi matematiche sono sempre interessanti per me.Ho fatto un po' di ricerche su internet e l'ho trovato @mitulshah La ricerca di Excel per la spline di Bezier, B-spline, è un algoritmo comune. Un collegamento Domanda sull'algoritmo di smoothing di Excel incluso il collegamento a un file zip: http://xlrotor.com/Smooth_curve_bezier_example_file.zip Questo zip contiene un esempio .xls del 2002 di una curva di Bezier con routine di automazione incorporate per catturare i pixel dalla curva levigata di Excel e interpolare i punti sulla curva.Non è "esatto" e utilizza una tecnica che preleva 4 pixel dalla curva. Il punto finale viene utilizzato due volte nel primo punto interpolato e nell'ultimo punto interpolato.
Una scoperta di JMP che ho fatto dopo il post di Craige sull'opzione dell'elemento GraphBuilder Line per renderlo una curva, è che la spline utilizzata per questa piattaforma deve utilizzare un algoritmo diverso perché le pendenze dell'endpoint sono molto simili a quelle di Excel. ho avviato uno script per eseguire un DSP (elaborazione del segnale digitale) estraendo i pixel della trama GB. Quindi ho trovato i collegamenti Web sopra elencati e ho deciso di utilizzare solo i punti interpolati dal foglio di calcolo di Excel e di sovrapporli con la linea GB (curva). La prima schermata di seguito mostra il foglio di lavoro di Excel con il grafico di Excel con spline di Bezier e punti interpolati, che sono stati aggiunti come punti Spin B alla tabella JMP.La seconda immagine mostra la linea JMP GB (curva) con i punti interpolati di Excel sovrapposti.
Excel Interpolated Points > Spin B in JMP tablePunti interpolati di Excel > Rotazione B nella tabella JMP
JMP Line(curve) spline overlaid with Excel interpolationsSpline linea (curva) JMP sovrapposta con interpolazioni Excel
Noterai che le interpolazioni sono leggermente sfalsate rispetto alla linea JMP (curva) sulla coda superiore, ciò potrebbe essere dovuto all'algoritmo di interpolazione, alle differenze nelle curve Excel e JMP o a una combinazione di entrambi. Nota in quegli stessi 4 punti sono leggermente più alti della curva nel grafico di Excel.
Quindi, la mia conclusione è che la spline JMP GB Line(curve) è molto simile alla curva Bezier di Excel.Il mio interesse non è alto, ma se mi annoio potrei finire il mio script DSP per "ottenere" i punti della linea (curva).Le versioni precedenti di JMP riportavano i punti della curva nei file .jrn salvati, ora nel file .jrn c'è solo un riferimento a una funzione nascosta.
Ora, se mi stessi consultando su questo problema, la mia prima serie di domande sarebbe:
- Da dove vengono questi dati (4 punti) e qual è l'obiettivo?
- Le curve spline, come le linee ei polinomi, possono essere utili per creare curve di calibrazione (curve da utilizzare per l'interpolazione) al posto di complesse relazioni funzionali. Tuttavia, per motivi di accuratezza, si consigliano intervalli di dati e repliche regolari, se le interpolazioni devono essere calcolate dalle curve. Poiché i valori X sono spaziati in modo irregolare, mi chiedo se esiste una terza (o più) variabile che influenza sia X che Y. Ad esempio, entrambe sono letture da una lettura di prova giornaliera o settimanale.
- Esiste un primo principio fondamentale, alla base della relazione di X e Y, ad esempio: dose-risposta; crescita cellulare; contaminazione-corrosione, ecc.
- Perché così pochi punti? Qual è il costo della replica?
In base alla mia esperienza, se esiste una relazione non lineare sottostante fondamentale, spesso vale la pena di ottenere i dati e adattare la relazione per stimare i parametri (curve di apprendimento, curve di degrado), ecc. Come riscontrato nelle eccellenti informazioni fornite da Craige Hales, piccole differenze nei punti di controllo (numero e posizione), nodi e punti finali possono creare grandi differenze nella curvatura (punti sulla curva) di una spline, specialmente con ampi spazi in "x".È mia impressione che Excel non abbia intenzionalmente pubblicato punti o una formula per la loro curva spline in modo che le persone non lo usino come un modello adattato per la stima.Nota con valori "vicini" di X e replica, l'interpolazione è molto meno rischiosa.
Ri: interpolazione di Bezierhttp://users.umiacs.umd.edu/~ramani/cmsc460/Lecture9_interp_2008.pdf dice
snip of a pdf describing how to choose slope for first and last end points of a splineframmento di un pdf che descrive come scegliere la pendenza per il primo e l'ultimo punto finale di una spline
Sospetto che 1 o 4 potrebbero applicarsi qui; Sono al di là della mia conoscenza.
Ri: interpolazione di BezierSÌ. ci spero.
Un altro modo per farlo --> forse possiamo calcolare il punto di controllo in base ai quattro punti noti che ho sulla curva e quindi disegnare una curva di Bezier che passa per tutti e quattro i punti. c'è un modo per farlo?
Ri: interpolazione di BezierLa spline sceglie una pendenza all'inizio e alla fine che non sembra essere la stessa per JMP ed Excel. La spline utilizza una cubica diversa tra ogni coppia di punti e può unire agevolmente un gran numero di punti, abbinando pendenze e curvature. Se hai solo quattro punti, potrebbe avere senso adattare un cubo ai quattro punti e utilizzare la formula per eseguire l'interpolazione.
Forse avremo la risposta di uno statistico.
Graph Builder can do it. So can Fit Y by X.Graph Builder può farlo. Quindi può adattare Y per X.
Ri: interpolazione di BezierMi scuso per la confusione qui.
Dati:

In JMP, ho adattato Y per X


Se inserisco gli stessi dati in Excel

Capisco questo

Si noti che nella linea verde di JMP c'è un po' di oscillazione/attorcigliamento nella curva in basso a sinistra (tra i valori X 2-3), mentre in Excel non è così.
il mio obiettivo finale è interpolare i valori dalla linea, quindi se Excel e JMP forniscono due linee diverse, finirei con valori di interpolazione diversi.
Ri: interpolazione di BezierPensando a @gzmorgan0 spiegazione, puoi farlo nel generatore di grafici:
Select Points, then SHIFT to add the lineSelezionare Punti, quindi MAIUSC per aggiungere la linea
Ri: interpolazione di Bezier@mitulshah ,
Sarebbe utile se aggiungessi il grafico di Excel che ti aspetti.
Se utilizzo i dati (serie) che hai fornito, senza ordinarli, Excel crea il primo grafico in basso. Se ordino le serie in Excel, il secondo grafico è il risultato.
Notare che
- Le piattaforme JMP adattano per impostazione predefinita una curva ai dati per valore e non per ordine nella tabella.
- Fit Y by X, fit Flexible, Kernel Smoother Linear Tri-Cube, sarebbe l'opzione che userei invece una spline, supponendo che tu voglia una trama come la seconda trama qui sotto.
- Per produrre un grafico come il primo grafico sotto in cui la curva tiene conto dell'ordine dei dati, sarà necessario creare uno script per un percorso, come @Craige_Hales accennato in precedenza.
Dalla tua risposta, non mi era chiaro cosa stai cercando.

Ri: interpolazione di BezierQuesto è quello che sto cercando di fare
Replica il grafico a dispersione di Excel con una funzione di curva uniforme.
Se utilizzo JMP adatta Y per X con un dorso flessibile, ho una curva diversa da quella che Excel sta producendo con grafico a dispersione + linea liscia. Credo che Excel stia utilizzando l'adattamento della curva di Bezier.
Punti dati:
Gira | X | Y
UN | 2.41 | 846.8692
UN | 0,93 | 77.043
UN | 1.37 | 155.2193
UN | 1.96 | 390.4639

Non voglio disegnare questa linea usando una spline flessibile, ma voglio forzare la curva di bezier. Spero che abbia un senso.
Grazie
Ri: interpolazione di BezierCosa stai cercando di fare?
IL wikipedia l'articolo è abbastanza buono. I punti di controllo generalmente non giacciono sulla curva di Bézier.
JMP può adattare una spline a un insieme di punti e fornisce un dispositivo di scorrimento per impostare la rigidità della spline.
this spline is very stiffquesta scanalatura è molto rigida
Edit: cattiva didascalia! NON molto rigido!
vedi anche Come vedere l'equazione usata per la spline? E regressione spline cubica E Come viene determinata la Smooth Line nel Costruttore di grafici
Ri: interpolazione di BezierCiao Craig,
Sto cercando di capire la funzione path () e spostare punti, punti di controllo, punti bezier.
Ho questi quattro punti dai dati che ho
punto =
[ 0,93 77,04 1,
1,37 155,22 0,
1,96 390,46 0,
2,41 846,87 3];
Quando inserisco questo nella funzione percorso, ottengo una linea tra il punto 1 e il punto 4, ma non passa attraverso il punto 2 e il punto 3. Mi sto perdendo qualcosa?
Grazie.
Ri: interpolazione di BezierRisposte multiple, a seconda di cosa devi fare. Eccotene alcune.
Per i grafici 2D è possibile utilizzare la funzione percorso. Non puoi trovarlo cercando Bezier perché l'indice di scripting lo scrive Bézier. Prova invece a cercare zier.@XanGregg @sheila_loring
Questo esempio estende l'esempio dell'indice di scripting con maniglie trascinabili.
// 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 );
)
);Mi sono reso conto che avrei dovuto anche obbligare lo spostamento del punto 4 a trascinare anche i punti 3 e 5. (Non fatto, dovrebbe essere facile.)
Bezier control pointsPunti di controllo Bezier
Forse hai bisogno di una spline. Non sono sicuro di quale sia la distinzione tra spline, p-spline, b-spline nell'indice di scripting. Ho usato spline HeatColor vs Spline vs Interpolazione per fare questa curva
spline coef, spline evalspline coef, spline eval
C'è anche il supporto per le spline Bezier nel supporto 3D OpenGL di JMP: https://www.jmp.com/support/help/14-2/bezier-curves.shtml che potrebbe aiutare a disegnare una superficie. Dentro si nasconde un cattivo esempio VideoFFT
Ottimo post @Duane_Hayes Comprensione delle spline cubiche
Qualcosa che ho incontrato lungo la strada: https://www.tinaja.com/glib/bezconn.pdf