Bezier-InterpolationHallo,
Gibt es eine Funktion zum Plotten der Bezier-Interpolation?
Betreff: Bezier-Interpolation@Craige_Hales Und @mitulshah ,
Mein Wissen und meine Erfahrung mit Bezier-Kurven sind begrenzt. Ich habe ihre Nützlichkeit beim Entwurf (Bau- und Landschaftsbau), Design und Bekleidungsdesign gesehen. Natürlich sind mathematische Grundlagen für mich immer interessant.Ich habe ein wenig im Internet herumgestöbert und das gefunden @mitulshah Die Suche nach dem Bezier-Spline-, B-Spline-Algorithmus von Excel ist weit verbreitet. Ein Link Frage zum Excel-Glättungsalgorithmus habe den Link zu einer ZIP-Datei beigefügt: 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 im ersten interpolierten Punkt und im letzten interpolierten Punkt zweimal verwendet.
Eine JMP-Entdeckung, die ich nach Craiges Beitrag über die GraphBuilder-Option „Linienelement“ 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) durchzuführen, indem ich die Pixel des GB-Plots extrahierte. Dann habe ich die oben aufgeführten Weblinks gefunden und beschlossen, 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 überlagerten Excel-interpolierten Punkten.
Excel Interpolated Points > Spin B in JMP tableExcel Interpolated Points > Spin B in JMP tableExcel-interpolierte Punkte > Spin B in der JMP-Tabelle
JMP Line(curve) spline overlaid with Excel interpolationsJMP Line(curve) spline overlaid with Excel interpolationsJMP-Linien-Spline (Kurve), überlagert mit Excel-Interpolationen
Sie werden feststellen, dass die Interpolationen leicht von der JMP-Linie (Kurve) am oberen Ende versetzt sind. Dies kann am Interpolationsalgorithmus, an Unterschieden in Excel- und JMP-Kurven oder an einer Kombination aus beidem liegen. Beachten Sie, dass die gleichen 4 Punkte etwas höher liegen als die Kurve im Excel-Diagramm.
Mein Fazit 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, beende ich vielleicht mein DSP-Skript, um die Linienpunkte (Kurvenpunkte) zu „bekommen“.Frühere Versionen von JMP dienten zur Meldung von Kurvenpunkten in gespeicherten .jrn-Dateien, jetzt befindet sich in der .jrn-Datei nur noch ein Verweis auf eine versteckte Funktion.
Wenn ich mich nun 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 anstelle komplexer funktionaler Beziehungen Kalibrierungskurven (Kurven zur Interpolation) zu erstellen. Aus Genauigkeitsgründen werden jedoch regelmäßige Datenintervalle und eine Replikation 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. Beispielsweise handelt es sich bei beiden um Auslesungen einer täglichen oder wöchentlichen Testauslesung.
- Gibt es ein grundlegendes, erstes Prinzip, das der Beziehung von X und Y zugrunde liegt, zum Beispiel: Dosis-Wirkung; Zellwachstum; Verschmutzung-Korrosion usw.
- Warum so wenige Punkte? Wie hoch sind die Kosten für die Replikation?
Ich habe die Erfahrung gemacht, dass es sich oft lohnt, die Daten zu beschaffen und die Beziehung anzupassen, um die Parameter (Lernkurven, Degradationskurven) usw. abzuschätzen, wenn es eine grundlegende nichtlineare Beziehung gibt. Wie aus den hervorragenden Informationen hervorgeht, die von bereitgestellt werden 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 weder Punkte noch eine Formel für den Kurvenspline veröffentlicht hat, damit die Leute ihn nicht wie ein angepasstes Modell zur Schätzung verwenden würden.Beachten Sie, dass die Interpolation bei „nahen“ Werten von X und Replikation viel weniger riskant ist.
Betreff: 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 splinesnip of a pdf describing how to choose slope for first and last end points of a splineAusschnitt aus einem PDF, in dem beschrieben wird, wie die Steigung für den ersten und letzten Endpunkt eines Splines ausgewählt wird
Ich vermute, dass hier 1 oder 4 zutreffen könnte; Ich bin jenseits meines Wissens.
Betreff: Bezier-InterpolationJa. Darauf hoffe ich.
Eine andere Möglichkeit, dies zu tun -> vielleicht können wir den Kontrollpunkt basierend auf den vier bekannten Punkten, die ich auf der Kurve habe, berechnen und dann eine Bézier-Kurve zeichnen, die durch alle vier Punkte verläuft. Gibt es eine Möglichkeit, das zu tun?
Betreff: 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 reibungslos verbinden, wobei Steigungen und Krümmungen angepasst werden. Wenn Sie nur vier Punkte haben, kann es sinnvoll sein, die vier Punkte kubisch anzupassen und die Formel für die Interpolation zu verwenden.
Vielleicht bekommen wir die Antwort eines Statistikers.
Graph Builder can do it. So can Fit Y by X.Graph Builder can do it. So can Fit Y by X.Graph Builder kann es tun. So kann Y an X angepasst werden.
Betreff: Bezier-InterpolationIch entschuldige mich für die Verwirrung hier.
Daten:

In JMP habe ich „Y an X anpassen“ durchgeführt


Wenn ich die gleichen Daten in Excel eingebe

Ich verstehe das

Beachten Sie, dass in der grünen JMP-Linie unten links eine leichte Schwingung/Knick in der Kurve auftritt (zwischen den
Mein Endziel besteht darin, Werte aus der Linie zu interpolieren. Wenn Excel und JMP also zwei verschiedene Linien liefern, erhalte ich am Ende unterschiedliche Interpolationswerte.
Betreff: Bezier-InterpolationNachdenken über @gzmorgan0 Erklärung, Sie können es im Graph Builder tun:
Select Points, then SHIFT to add the lineSelect Points, then SHIFT to add the lineWählen Sie „Punkte“ und dann die UMSCHALTTASTE, um die Linie hinzuzufügen
Betreff: Bezier-Interpolation@mitulshah ,
Es wäre hilfreich, wenn Sie das erwartete Excel-Diagramm anhängen würden.
Wenn ich die von Ihnen bereitgestellten Daten (Reihen) 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 eine Kurve standardmäßig nach Wert und nicht nach Reihenfolge in der Tabelle an die Daten an.
- Y durch
- Um ein Diagramm wie das erste Diagramm unten zu erstellen, bei dem die Kurve die Datenreihenfolge berücksichtigt, müssen Sie ein Skript für einen Pfad erstellen @Craige_Hales zuvor erwähnt.
Aus Ihrer Antwort ist mir nicht klar geworden, wonach Sie suchen.

Betreff: Bezier-InterpolationDas versuche ich zu tun
Replizieren Sie das Streudiagramm von Excel mit einer Funktion für glatte Kurven.
Wenn ich die JMP-Anpassung von Y nach Ich glaube, Excel verwendet die Bezier-Kurvenanpassung.
Datenpunkte:
Drehen | X | Y
A | 2,41 | 846.8692
A | 0,93 | 77.043
A | 1,37 | 155.2193
A | 1,96 | 390.4639

Ich möchte diese Linie nicht mit einem flexiblen Spline zeichnen, sondern eine Bezier-Kurve erzwingen. Ich hoffe das ergibt Sinn.
Danke
Betreff: 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 bietet Ihnen einen Schieberegler zum Festlegen der Steifigkeit des Splines.
this spline is very stiffthis spline is very stiffDieser Spline ist sehr steif
Edit: schlechte Bildunterschrift! NICHT sehr steif!
siehe auch Wie kann man die für den Spline verwendete Gleichung sehen? Und Kubische Spline-Regression Und Wie wird die Smooth Line im Graph Builder ermittelt?
Betreff: Bezier-InterpolationHallo Craige,
Ich versuche, die Funktion von path() zu verstehen und Punkte, Kontrollpunkte und Bezierpunkte 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, die jedoch nicht durch Punkt 2 und Punkt 3 verläuft. Vermisse ich etwas?
Danke.
Betreff: Bezier-InterpolationMehrere Antworten, je nachdem, was Sie tun müssen. Hier sind einige.
Für 2D-Diagramme können Sie die Pfadfunktion verwenden. Sie können es nicht finden, indem Sie nach Bezier suchen, da es im Skriptindex als Bézier geschrieben wird. Versuchen Sie stattdessen, nach „zier“ zu suchen.@XanGregg @sheila_loring
Dieses Beispiel erweitert das Beispiel für den Skriptindex um ziehbare Ziehpunkte.
// 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 einschränken sollte, um auch die Punkte 3 und 5 mitzuziehen. (Nicht erledigt, sollte einfach sein.)
Bezier control pointsBezier control pointsBezier-Kontrollpunkte
Vielleicht brauchen Sie einen Spline. Ich bin mir nicht sicher, was im Skriptindex der Unterschied zwischen Spline, P-Spline und B-Spline ist. Ich habe Spline verwendet HeatColor vs. Spline vs. Interpolieren um diese Kurve zu machen
spline coef, spline evalspline coef, spline evalSpline-Koeffizient, Spline-Auswertung
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 Das könnte helfen, eine Oberfläche zu zeichnen. Ein schlechtes Beispiel ist darin versteckt FFT-Video
Guter Eintrag @Duane_Hayes Kubische Splines verstehen
Etwas, auf das ich unterwegs gestoßen bin: https://www.tinaja.com/glib/bezconn.pdf