Wie implementiere ich eine Bézier-Kurve in C++?
Ich würde am Liebsten ein Bézier-Kurve. Ich habe dies in C# vor, aber ich bin völlig vertraut mit den C++ - Bibliotheken. Wie gehe ich bei der Erstellung einer quadratischen Kurve?
void printQuadCurve(float delta, Vector2f p0, Vector2f p1, Vector2f p2);
Klar würden wir brauchen, um lineare interpolation, aber ist diese vorhanden, in die standard-Mathematik-Bibliothek? Wenn nicht, wo kann ich es finden?
Update 1:
Sorry, ich vergaß zu erwähnen, ich verwende Linux.
InformationsquelleAutor Nick Bolton | 2009-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine C# - Bibliothek früher?
In C++, keine standard-library-Funktion für Bezier-Kurven ist nicht verfügbar (noch nicht). Natürlich können Sie Rollen Sie Ihre eigenen (CodeProject Probe) oder eine Mathematik-Bibliothek.
Diese Beitrag erläutert die Idee gut, aber in Actionscript. Die übersetzung sollte nicht viel von einem problem.
Vielen Dank für die Kennzeichnung; ich fand eine archivierte Kopie in der Wayback Machine und bearbeitet die Antwort.
InformationsquelleAutor dirkgently
Kürzlich lief ich über die gleiche Frage und wollte umgesetzt, es auf meinem eigenen.
Dieses Bild von Wikipedia hat mir geholfen:
Den folgenden code in C++ geschrieben ist und zeigt, wie die Berechnung einer quadratischen Bézier.
Mit (x1|y1), (x2|y2) und (x3|y3) wobei P0, P1 und P2 im Bild. Nur zur Darstellung der grundlegenden Idee...
Für diejenigen, die Fragen für die kubische bezier-es funktioniert einfach Analog (auch aus Wikipedia):
Diese Antwort enthält Code für es.
Danke! Sie haben vollkommen Recht. Was ich brauchte, war zu der Zeit ein lebendiges Verständnis von berzier Kurven (dass die Menschen sich ein ähnlicher Wunsch ist wahrscheinlich der Grund, diese Antwort wurde von Ihnen positiv bewertet werden, dass viele Male). Die meisten anderen algorithmen sind (oft notwendig) - Optimierungen der DeCasteljau, so scheint es, um ein wirklich gutes Fundament, auf dem die Kenntnisse lassen sich leicht aufbauen.
InformationsquelleAutor Jakob Riedle
Hier ist eine Allgemeine Implementierung für eine Kurve mit einer beliebigen Anzahl von Punkten.
Beachten Sie, dass es verwendet heap-Speicher für einen temporären array zu, das ist nicht alles, was effizient ist. Wenn Sie nur benötigen, um mit einer festen Anzahl der Punkte, die Sie könnte hartcodieren, numPoints Wert und die Verwendung von stack-Speicher statt.
Natürlich vorausgesetzt, Sie haben ein vec2 Struktur und Operatoren für es wie folgt:
?? Es ist Bézier-gemäß der Frage und den Namen der Funktion "getBezierPoint"
Die Grundidee ist die gleiche für Vector3 Recht ?
Ja, jede dimension vector funktionieren sollte.
InformationsquelleAutor iforce2d
Haben Sie die Wahl zwischen de-Casteljau - Methode, die rekursiv split control Pfad, bis Sie an den Punkt gelangen, mit Hilfe einer linearen interpolation, wie oben erläutert, oder die Bézier-Methode ist zum mischen der Kontrollpunkte.
Bézier-Methode ist
für cubics und
für quadratics.
t ist in der Regel auf 0-1, aber das ist nicht ein wesentlicher - in der Tat die Kurven erweitern bis unendlich. P0, P1, usw. sind die Kontrollpunkte. Die Kurve geht durch die beiden Punkte aber in der Regel nicht durch die anderen Punkte.
InformationsquelleAutor Malcolm McLean
Wenn Sie nur wollen, um die Anzeige einer Bezier-Kurve, die Sie verwenden können, so etwas wie PolyBezier für Windows.
Wenn Sie möchten, implementieren Sie die routine sich selbst, finden Sie lineare interpolation code alle über die Intarnetz.
Glaube ich, dass die Boost-Bibliotheken Unterstützung für diese. Lineare interpolation, nicht, Beziers, speziell. Don ' T zitieren Sie mich auf dieser, jedoch.
Während dies theoretisch eine Antwort auf die Frage, vorzuziehen, umfassen die wesentlichen Teile der Antwort hier, und geben Sie den link zur Referenz.
InformationsquelleAutor