Bezier-InterpolationHallo,
Gibt es eine Funktion zum Plotten der Bezier-Interpolation?
Re: Bezier-Interpolation@Craige_Hales Und @mitulshah ,
Mein Wissen und meine Erfahrung mit Bezier-Kurven sind begrenzt. Ich habe ihre Nützlichkeit beim Zeichnen (Bau- und Landschaftsgestaltung) und beim Kleidungsdesign gesehen. Mathematische Grundlagen interessieren mich natürlich immer.Ich habe ein bisschen im Internet gestöbert und das gefunden @mitulshah Die Suche von Excel nach dem Bezier-Spline-, B-Spline-Algorithmus von Excel ist weit verbreitet. Ein Link Frage zum Excel-Glättungsalgorithmus enthalten den Link zu einer ZIP-Datei: http://xlrotor.com/Smooth_curve_bezier_example_file.zip Diese Zip-Datei enthält ein 2002 .xls-Beispiel einer Bezier-Kurve mit eingebetteten Automatisierungsroutinen, um die Pixel aus der geglätteten Excel-Kurve zu erfassen und die Punkte auf der Kurve zu interpolieren.Es ist nicht "exakt" und verwendet eine Technik, die 4 Pixel von der Kurve entfernt. Der Endpunkt wird zweimal im ersten interpolierten Punkt und im letzten interpolierten Punkt verwendet.
Eine JMP-Entdeckung, die ich nach Craiges Beitrag über die GraphBuilder-Linienelementoption gemacht habe, um daraus eine Kurve zu machen, ist, dass der für diese Plattform verwendete Spline einen anderen Algorithmus verwenden muss, da die Endpunktsteigungen denen von Excel sehr ähnlich sind. Ich habe ein Skript gestartet, um etwas DSP (digitale Signalverarbeitung) zu machen, indem ich die Pixel des GB-Plots extrahiere. Dann habe ich die oben aufgeführten Weblinks gefunden und beschließt, einfach die interpolierten Punkte aus der Excel-Tabelle zu verwenden und sie mit der GB-Linie (Kurve) zu überlagern. Der erste Screenshot unten zeigt das Excel-Arbeitsblatt mit dem Excel-Diagramm mit Bezier-Spline und interpolierten Punkten, die als Spin-B-Punkte zur JMP-Tabelle hinzugefügt wurden.Das zweite Bild zeigt die JMP-GB-Linie (Kurve) mit den überlagerten interpolierten Excel-Punkten.
Excel Interpolated Points > Spin B in JMP tableExcel Interpolated Points > Spin B in JMP-Tabelle
JMP Line(curve) spline overlaid with Excel interpolationsJMP Line(Kurve)-Spline, überlagert mit Excel-Interpolationen
Sie werden feststellen, dass die Interpolationen leicht von der JMP-Linie (Kurve) am oberen Ende versetzt sind, was auf den Interpolationsalgorithmus, Unterschiede in Excel- und JMP-Kurven oder eine Kombination aus beidem zurückzuführen sein könnte. Beachten Sie, dass dieselben 4 Punkte etwas höher sind als die Kurve im Excel-Diagramm.
Meine Schlussfolgerung ist also, dass der JMP GB Line(curve)-Spline der Excel-Bezier-Kurve sehr ähnlich ist.Mein Interesse ist nicht groß, aber wenn mir langweilig wird, könnte ich mein DSP-Skript beenden, um die Linien(kurven)-Punkte zu "erhalten".Frühere Versionen von JMP verwendeten Kurvenpunkte in gespeicherten .jrn-Dateien, jetzt befindet sich nur noch ein Verweis auf eine versteckte Funktion in der .jrn-Datei.
Wenn ich mich jetzt zu diesem Problem beraten würde, wären meine ersten Fragen:
- Woher kommen diese Daten (4 Punkte) und was ist das Ziel?
- Spline-Kurven können wie Linien und Polynome nützlich sein, um Kalibrierungskurven (Kurven, die für die Interpolation verwendet werden) anstelle komplexer funktionaler Beziehungen zu erstellen. Aus Gründen der Genauigkeit werden jedoch regelmäßige Datenintervalle und Wiederholungen empfohlen, wenn Interpolationen aus den Kurven berechnet werden sollen. Da die X-Werte unregelmäßig verteilt sind, frage ich mich, ob es eine dritte (oder mehr) Variable gibt, die sowohl X als auch Y beeinflusst. Beide sind beispielsweise Auslesungen einer täglichen oder wöchentlichen Testauslesung.
- Gibt es ein grundlegendes erstes Prinzip, das die Beziehung von X und Y untermauert, zum Beispiel: Dosis-Antwort; Zellwachstum; Kontamination-Korrosion usw.
- Warum so wenige Punkte? Was kostet die Replikation?
Meiner Erfahrung nach lohnt es sich oft, die Daten zu beschaffen und die Beziehung anzupassen, um die Parameter (Lernkurven, Degradationskurven) usw. abzuschätzen, wenn es eine grundlegende zugrunde liegende nichtlineare Beziehung gibt. Wie in den hervorragenden Informationen von gefunden Craige Hales, kleine Unterschiede in den Kontrollpunkten (Anzahl und Position), Knoten und Endpunkten können große Unterschiede in der Krümmung (Punkte auf der Kurve) eines Splines bewirken, insbesondere bei großen Lücken in "x".Ich vermute, dass Excel absichtlich keine Punkte oder eine Formel für ihren Kurvenspline veröffentlicht hat, damit die Leute es nicht wie ein angepasstes Modell zur Schätzung verwenden würden.Beachten Sie, dass bei "nahen" Werten von X und Replikation die Interpolation viel weniger riskant ist.
Re: Bezier-Interpolationhttp://users.umiacs.umd.edu/~ramani/cmsc460/Lecture9_interp_2008.pdf sagt
snip of a pdf describing how to choose slope for first and last end points of a splineAusschnitt aus einer PDF-Datei, in der beschrieben wird, wie die Steigung für den ersten und letzten Endpunkt eines Splines ausgewählt wird
Ich vermute, dass 1 oder 4 hier zutreffen könnten; Ich bin jenseits meines Wissens.
Re: Bezier-InterpolationJa. Darauf hoffe ich.
Eine andere Möglichkeit, dies zu tun -> vielleicht können wir den Kontrollpunkt basierend auf den vier bekannten Punkten berechnen, die ich auf der Kurve habe, und dann eine Bezierkurve zeichnen, die durch alle vier Punkte verläuft. Gibt es eine Möglichkeit, das zu tun?
Re: Bezier-InterpolationDer Spline wählt am Anfang und am Ende eine Steigung, die für JMP und Excel nicht gleich zu sein scheint. Der Spline verwendet eine andere Kubik zwischen jedem Punktpaar und kann eine große Anzahl von Punkten nahtlos verbinden, indem er Steigungen und Krümmungen anpasst. Wenn Sie nur vier Punkte haben, kann es sinnvoll sein, eine Kubikzahl an die vier Punkte anzupassen und die Formel zur Interpolation zu verwenden.
Vielleicht bekommen wir die Antwort eines Statistikers.
Graph Builder can do it. So can Fit Y by X.Graph Builder kann das. So kann Y nach X passen.
Re: Bezier-InterpolationIch entschuldige mich für die Verwirrung hier.
Daten:

In JMP habe ich Y by X angepasst


Wenn ich die gleichen Daten in Excel eingebe

Ich verstehe das

Beachten Sie in der grünen JMP-Linie, dass die Kurve unten links (zwischen den X-Werten 2-3) etwas schwingt / knickt, während dies in Excel nicht der Fall ist.
Mein Endziel ist es, Werte aus der Linie zu interpolieren. Wenn also Excel und JMP zwei verschiedene Linien liefern, würde ich am Ende unterschiedliche Interpolationswerte haben.
Re: Bezier-InterpolationNachdenken über @gzmorgan0 Erklärung, Sie können es im Graph Builder tun:
Select Points, then SHIFT to add the lineWählen Sie Punkte und dann UMSCHALT, um die Linie hinzuzufügen
Re: Bezier-Interpolation@mitulshah ,
Es wäre hilfreich, wenn Sie das erwartete Excel-Diagramm anhängen würden.
Wenn ich die von Ihnen bereitgestellten Daten (Serien) verwende, ohne sie zu sortieren, erstellt Excel das erste Diagramm unten. Wenn ich die Reihe in Excel sortiere, ist das zweite Diagramm das Ergebnis.
Beachten Sie, dass
- JMP-Plattformen passen standardmäßig eine Kurve an die Daten nach Wert und nicht nach Reihenfolge in der Tabelle an.
- Fit Y by X, fit Flexible, Kernel Smoother Linear Tri-Cube wäre die Option, die ich stattdessen mit einem Spline verwenden würde, vorausgesetzt, Sie möchten ein Diagramm wie das zweite Diagramm unten.
- Um ein Diagramm wie das erste Diagramm unten zu erstellen, in dem die Kurve die Datenreihenfolge berücksichtigt, müssen Sie ein Skript für einen Pfad erstellen, z @Craige_Hales zuvor erwähnt.
Aus Ihrer Antwort war mir nicht klar, wonach Sie suchen.

Re: Bezier-InterpolationDas versuche ich zu tun
Replizieren Sie das Streudiagramm von Excel mit einer glatten Kurvenfunktion.
Wenn ich JMP fit Y by X mit einem flexiblen Rückgrat verwende, habe ich eine andere Kurve als die, die Excel mit Streudiagramm + glatter Linie erzeugt. Ich glaube, Excel verwendet Bezier-Kurvenanpassung.
Datenpunkte:
Drehen | X | Y
Ein | 2.41 | 846.8692
Ein | 0,93 | 77.043
Ein | 1,37 | 155.2193
Ein | 1,96 | 390.4639

Ich möchte diese Linie nicht mit einem flexiblen Spline zeichnen, aber ich möchte eine Bezierkurve erzwingen. Ich hoffe das ergibt Sinn.
Danke
Re: Bezier-InterpolationWas versuchst du zu machen?
Der Wikipedia Artikel ist ziemlich gut. Die Kontrollpunkte liegen im Allgemeinen nicht auf der Bezier-Kurve.
JMP kann einen Spline an eine Reihe von Punkten anpassen und stellt Ihnen einen Schieberegler zur Verfügung, um die Steifigkeit des Splines einzustellen.
this spline is very stiffDieser Spline ist sehr steif
Edit: schlechte Bildunterschrift! NICHT sehr steif!
siehe auch Wie kann ich die für Spline verwendete Gleichung sehen? Und Kubische Spline-Regression Und Wie wird die Smooth Line im Graph Builder ermittelt
Re: Bezier-InterpolationHallo Craige,
Ich versuche, die Funktion path () zu verstehen und Punkte, Kontrollpunkte und Bezier-Punkte zu verschieben.
Ich habe diese vier Punkte aus den Daten, die ich habe
Punkt =
[ 0,93 77,04 1,
1,37 155,22 0,
1,96 390,46 0,
2,41 846,87 3];
Wenn ich dies in die Pfadfunktion einfüge, erhalte ich eine Linie zwischen Punkt 1 und Punkt 4, aber sie geht nicht durch Punkt 2 und Punkt 3. Übersehe ich etwas?
Danke.
Re: Bezier-InterpolationMehrere Antworten, je nachdem, was Sie tun müssen. Hier sind einige.
Für 2D-Grafiken können Sie die Pfadfunktion verwenden. Sie können es nicht finden, indem Sie nach Bezier suchen, da der Skriptindex es als Bézier buchstabiert. Versuchen Sie stattdessen, nach zier zu suchen.@XanGregg @sheila_loring
Dieses Beispiel erweitert das Scripting-Index-Beispiel um ziehbare Handles.
// 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 );
)
);Mir wurde klar, dass ich das Verschieben von Punkt 4 auch darauf beschränken sollte, die Punkte 3 und 5 mitzuziehen. (Nicht getan, sollte einfach sein.)
Bezier control pointsBezier-Kontrollpunkte
Vielleicht brauchst du einen Spline. Ich bin mir nicht sicher, was der Unterschied zwischen Spline, P-Spline, B-Spline im Skriptindex ist. Ich habe Splines verwendet HeatColor vs. Spline vs. Interpolation um diese Kurve zu machen
spline coef, spline evalSpline-Koef, Spline-Eval
Es gibt auch Unterstützung für Bezier-Splines in der 3D-OpenGL-Unterstützung von JMP: https://www.jmp.com/support/help/14-2/bezier-curves.shtml was helfen könnte, eine Oberfläche zu zeichnen. Ein schlechtes Beispiel ist darin versteckt FFT-Video
Guter Eintrag @Duane_Hayes Kubische Splines verstehen
Etwas, das mir unterwegs begegnet ist: https://www.tinaja.com/glib/bezconn.pdf