Also ich nehme an, dass die Endpunkte fest sind, und dann haben Sie eine Anzahl von (x, y) Beispielpunkten, die Sie mit einem kubischen Bezier passen möchten.
Die Anzahl der Beispielpunkte, die Sie haben, wird bestimmen, welchen Ansatz zu nehmen. Schauen wir uns durch ein paar Fälle:
2 Punkte
2 Abtastpunkten ist der einfachste Fall. Das gibt Ihnen insgesamt 4 Punkte, wenn Sie die Endpunkte zählen. Dies ist die Anzahl der Lebensläufe in einem kubischen Bezier. Um dies zu lösen, benötigen Sie einen Parameter (t) -Wert für beide Abtastpunkte. Dann haben Sie ein System von 2 Gleichungen und 2 Punkten, die Sie lösen müssen, wobei die Gleichung die parametrische Gleichung einer Bezier-Kurve bei den von Ihnen gewählten t-Werten ist.
Die t-Werte können beliebig sein, aber Sie erhalten bessere Ergebnisse, wenn Sie entweder 1/3 und 2/3 verwenden oder relative Abstände oder relative Abstände entlang einer Basislinie in Abhängigkeit von Ihren Daten betrachten.
1 Punkt
Dies ist auf 2 Punkte ähnlich, mit der Ausnahme, dass Sie nicht genügend Informationen haben alle Freiheitsgrade eindeutig zu bestimmen. Was ich vorschlagen würde, ist eine quadratische Bezier passen, und dann Grad erhöhen. Ich habe ein detailliertes Beispiel für die quadratische Anpassung in this question geschrieben.
Mehr als 2 Punkte
In diesem Fall gibt es keine eindeutige Lösung. Ich habe die Näherung der kleinsten Quadrate mit guten Ergebnissen verwendet. Die Schritte sind:
- Auswahl-T-Werte für jede Probe
- Bauen Sie das System von Gleichungen als Matrix
- Optional Verkleidung hinzuzufügen oder eine andere Glättungsfunktion
- die Matrix mit einem Least-Squares-Löse-Solver
Es gibt eine gute Beschreibung dieser Schritte in diesen free cagd textbook, Kapitel 11. Es spricht von B-Splines passend, aber eine kubische Bezier ist eine Art von B-Spline (0,0,0 Knotenvektor ist, 1,1,1 und hat 4 Punkte).
Danke für die schnelle Antwort. Ich dachte, dass Algebra wahrscheinlich erforderlich sein würde, aber das könnte ein bisschen obszön werden, wenn eine Kurve tausende Punkte haben könnte. Ich werde versuchen, große Kurven in kleinere Kurven zu brechen und die Zweipunktmethode anzuwenden. Falls das nicht klappt, werde ich dem mehr als zwei Punkte Versuch geben! – Everlag
Wenn die Kurvengenauigkeit nicht so wichtig ist, könnten Sie versuchen, nur zwei Punkte zu wählen und die 2-Punkte-Methode zu machen. :) – tfinniga
Ich ziele auf eine ordentliche Erholung der Kanten mit dem Sobel-Operator isoliert so genau wäre sehr viel bevorzugt. – Everlag