Interpolazione di BezierCIAO,
Esiste una funzione per tracciare l'interpolazione di Bezier?
Re: Interpolazione di Bezier@Craige_Hales E @mitulshah ,
La mia conoscenza ed esperienza delle curve di Bezier è limitata. Ho visto la loro utilità nella stesura del design (edilizia 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 l'algoritmo Bezier spline, B-spline, è comune. Un collegamento Domanda sull'algoritmo di livellamento di Excel incluso il collegamento a un file zip: http://xlrotor.com/Smooth_curve_bezier_example_file.zip Questo file zip contiene un esempio .xls del 2002 di una curva di Bezier con routine di automazione incorporate per acquisire i pixel dalla curva smussata di Excel e interpolare i punti sulla curva.Non è "esatto" e utilizza una tecnica che cattura 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 Linea di GraphBuilder per renderlo una curva, è che la spline utilizzata per questa piattaforma deve utilizzare un algoritmo diverso perché le pendenze del punto finale sono molto simili a quelle di Excel. ho avviato uno script per eseguire un po' di DSP (elaborazione del segnale digitale) estraendo i pixel del grafico GB. Poi ho trovato i collegamenti web elencati sopra e ho deciso di utilizzare semplicemente i punti interpolati dal foglio di calcolo Excel e di sovrapporli alla linea GB (curva). La prima schermata di seguito illustra il foglio di lavoro Excel con il grafico 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 tableExcel Interpolated Points > Spin B in JMP tablePunti interpolati Excel > Spin B nella tabella JMP
JMP Line(curve) spline overlaid with Excel interpolationsJMP Line(curve) spline overlaid with Excel interpolationsSpline di linea (curva) JMP sovrapposta con interpolazioni di Excel
Noterai che le interpolazioni sono leggermente sfalsate rispetto alla linea (curva) JMP sulla coda superiore, il che potrebbe essere dovuto all'algoritmo di interpolazione, alle differenze nelle curve Excel e JMP o a una combinazione di entrambi. Nota che quegli stessi 4 punti sono leggermente più alti della curva nel grafico di Excel.
Quindi, la mia conclusione è che la spline JMP GB Line (curva) è molto simile alla curva di 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 è presente solo un riferimento a una funzione nascosta.
Ora, se stessi consultando questo problema, la mia prima serie di domande sarebbe:
- Da dove provengono questi dati (4 punti) e qual è l’obiettivo?
- Le curve spline, come linee e polinomi, possono essere utili per creare curve di calibrazione (curve da utilizzare per l'interpolazione) al posto di relazioni funzionali complesse. Tuttavia, per motivi di precisione, si consigliano intervalli di dati e repliche regolari, se si devono calcolare le interpolazioni dalle curve. Poiché i valori X sono spaziati in modo irregolare, mi chiedo se esista una terza (o più) variabile che influenza sia X che Y. Ad esempio, entrambe sono letture provenienti da una lettura di prova giornaliera o settimanale.
- Esiste un primo principio fondamentale, alla base della relazione tra X e Y, ad esempio: risposta alla dose; 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 fondamentale sottostante, 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 fare grandi differenze nella curvatura (punti sulla curva) di una spline, specialmente con ampi spazi in "x".Ho la sensazione che Excel non abbia pubblicato di proposito punti o una formula per la spline della curva in modo che le persone non la usino come un modello adattato per la stima.Nota con valori "vicini" di X e replica, l'interpolazione è molto meno rischiosa.
Re: 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 splinesnip of a pdf describing how to choose slope for first and last end points of a splineritaglio 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 oltre la mia conoscenza.
Re: Interpolazione di BezierSÌ. Lo 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 attraverso tutti e quattro i punti. c'è un modo per farlo?
Re: 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 un cubo diverso tra ciascuna 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 can do it. So can Fit Y by X.Il Costruttore di grafici può farlo. Quindi può adattare Y per X.
Re: Interpolazione di BezierMi scuso per la confusione qui.
Dati:

In JMP, ho adattato Y rispetto a X


Se inserisco gli stessi dati in Excel

Ho capito

Si noti che nella linea verde di JMP c'è un po' di oscillazione/piegatura nella curva in basso a sinistra (tra i valori X 2-3), mentre in Excel non è questo il caso.
il mio obiettivo finale è interpolare i valori dalla linea, quindi se Excel e JMP forniscono due linee diverse, mi ritroverei con valori di interpolazione diversi.
Re: Interpolazione di BezierPensando a @gzmorgan0 spiegazione, puoi farlo nel generatore di grafici:
Select Points, then SHIFT to add the lineSelect Points, then SHIFT to add the lineSelezionare Punti, quindi MAIUSC per aggiungere la linea
Re: Interpolazione di Bezier@mitulshah ,
Sarebbe utile se aggiungessi il grafico Excel previsto.
Se utilizzo i dati (serie) forniti, senza ordinarli, Excel crea il primo grafico seguente. Se ordino la serie in Excel, il secondo grafico è il risultato.
Notare che
- Per impostazione predefinita, le piattaforme JMP adattano una curva ai dati in base al valore e non all'ordine nella tabella.
- Adatta Y per X, adatta Flessibile, 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 qui sotto in cui la curva tiene conto dell'ordine dei dati, dovrai creare uno script per un percorso, come @Craige_Hales menzionato in precedenza.
Dalla tua risposta non mi era chiaro cosa stessi cercando.

Re: 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 una colonna vertebrale flessibile, ho una curva diversa da quella prodotta da Excel con grafico a dispersione + linea morbida. Credo che Excel utilizzi l'adattamento della curva di Bezier.
Punti dati:
Girare | X| Y
A | 2.41 | 846.8692
A | 0,93| 77.043
A | 1.37| 155.2193
A | 1,96 | 390.4639

Non voglio disegnare questa linea utilizzando la spline flessibile, ma voglio forzare la curva di Bezier. Spero che abbia un senso.
Grazie
Re: Interpolazione di BezierCosa stai cercando di fare?
IL Wikipedia l'articolo è abbastanza buono. I punti di controllo generalmente non giacciono sulla curva di Bezier.
JMP può adattare una spline a una serie di punti e fornisce un dispositivo di scorrimento per impostare la rigidità della spline.
this spline is very stiffthis spline is very stiffquesta spline è molto rigida
Edit: brutta didascalia! NON molto rigido!
vedi anche Come vedere l'equazione utilizzata per la spline? E regressione spline cubica E Come viene determinata la linea uniforme nel Costruttore di grafici
Re: Interpolazione di BezierCiao Craige,
Sto cercando di comprendere 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 lo inserisco nella funzione path, 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.
Re: 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 vincolare lo spostamento del punto 4 per trascinare anche i punti 3 e 5. (Non fatto, dovrebbe essere facile.)
Bezier control pointsBezier control pointsPunti di controllo di Bezier
Forse hai bisogno di una spline. Non sono sicuro quale sia la distinzione tra spline, p-spline, b-spline nell'indice di scripting. Ho usato spline HeatColor vs Spline vs Interpolazione per realizzare questa curva
spline coef, spline evalspline coef, spline evalcoefficiente spline, valutazione spline
C'è anche il supporto per le spline di 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. Si nasconde un pessimo esempio Video FFT
Ottimo post @Duane_Hayes Comprendere le spline cubiche
Qualcosa in cui mi sono imbattuto lungo la strada: https://www.tinaja.com/glib/bezconn.pdf