„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Einfach Bézier-Kurven verstehen.

Einfach Bézier-Kurven verstehen.

Veröffentlicht am 25.08.2024
Durchsuche:854

Stellen Sie sich vor, wenn Sie nur gerade Linien, Ellipsen und Kreise verwenden könnten, wäre es dann nicht schwierig, ein Auto mit glatten Linien und einem komplexen Erscheinungsbild zu entwerfen?

1962 veröffentlichte der französische Ingenieur Pierre Bézier die Bézier-Kurve, die zunächst für die Karosseriekonstruktion von Autos verwendet wurde.

Simply understanding Bézier curves.

Bézier-Kurven können eine glatte Kurve durch eine Reihe von Kontrollpunkten definieren. Die Kurve verläuft immer durch den ersten und letzten Kontrollpunkt und wird durch die Form der dazwischen liegenden Kontrollpunkte beeinflusst. Darüber hinaus haben Bézier-Kurven die Eigenschaft konvexer Hüllen.

Bézier-Kurven werden häufig in der Computergrafik und Bildmodellierung verwendet, beispielsweise in der Animation, beim Schriftdesign und im Industriedesign.

Formel

Simply understanding Bézier curves.

Lassen Sie uns das verstehen.

P(t) stellt einen Punkt auf der Kurve bei t dar (t ist ein Bruch mit einem Wert von 0 bis 1). Was ist ein Punkt auf der Kurve bei t? Eine übliche Kurvenbeschreibung lautet: y = f(x), und zunächst verstehen wir P(t) als f(x). Der Unterschied besteht darin, dass P(t) eine parametrische Darstellung ist (und das Berechnungsergebnis ein „Vektor“ wie [x, y] ist), was später ausführlich erläutert wird.

Als nächstes stellt Pi den i-ten Kontrollpunkt dar (i beginnt bei 0). Am Beispiel der obigen Abbildung gibt es 4 Kontrollpunkte: P0, P1, P2, P3. Das n in der Formel ist der letzte Index der Kontrollpunkte, also n = 3 (beachten Sie, dass es sich nicht um die Anzahl der Kontrollpunkte, sondern um die Anzahl minus 1 handelt).

Bi,n(t) ist die Bernstein-Basisfunktion, auch Basisfunktion genannt. Für jedes spezifische (i, n) gibt es eine andere entsprechende Basisfunktion. Wenn Sie es aus einer gewichteten Perspektive verstehen, können Sie die Basisfunktion als Gewichtsfunktion betrachten, die den „Beitrag“ des i-ten Kontrollpunkts Pi zu den Kurvenkoordinaten an der Position von t angibt.

Die Formel für die Basisfunktion lautet wie folgt:

Simply understanding Bézier curves.

(ni)\binom{n}{i} ( in) Ist die Kombinationszahl (wie viele Möglichkeiten, i aus n auszuwählen?). Warum die Basisfunktion so aussieht, kann im Zusammenhang mit dem De Casteljau-Algorithmus verstanden werden (siehe später im Text)

Zurück zur P(t)-Formel, i=0n\sum_{i=0}^{n} i=0n ist das Summationssymbol und zeigt an, dass der nachfolgende Teil ( Bi,n(t)PiB_{i,n}(t) \cdot P_iBi,n(t )⋅Pi ) soll von i=0 bis i=n summiert werden.

Nehmen Sie die obige Abbildung als Beispiel und gehen Sie davon aus, dass wir P (0,1) berechnen möchten. Wie geht das? Es wird wie folgt erweitert:

Simply understanding Bézier curves.

Simply understanding Bézier curves.

Ersetzen Sie t=0,1, um Folgendes zu erhalten:

Simply understanding Bézier curves.

Parametrische Darstellung der Kurve

Hier wird direkt ein Artikel eines Internetnutzers zitiert (Link)

Simply understanding Bézier curves.

Konzentrieren wir uns auf die obige Formel.

Wie in der obigen Abbildung gezeigt, kann die uns bekannte gerade Linie aus einer anderen Perspektive verstanden werden: Unter Verwendung von t (d. h. der Länge von |AP| vom Punkt P zum bekannten Punkt (x0, y0)) dann kann Punkt P durch die oben genannten trigonometrischen Funktionen bestimmt werden.

Allgemeiner kann es geschrieben werden als:

Simply understanding Bézier curves.

Hier ist P0 der Vektor [x0,y0]und v ist auch ein Vektor. Zusammengenommen ist P(t) der Vektor [x,y].

Ich schaue mir den Kreis noch einmal an:

Simply understanding Bézier curves.

Wie im Diagramm gezeigt, kann der Kreis so betrachtet werden, als hätte er einen bekannten Mittelpunkt, wobei jeder Punkt auf dem Kreis durch den Drehwinkel und den Radius bestimmt wird. Es kann auch geschrieben werden als:

Simply understanding Bézier curves.

Die parametrischen Gleichungen behalten die geometrische Invarianz bei und können Formen wie Kreise darstellen (wobei ein x mehreren y-Werten entspricht).

De Casteljau

Der De Casteljau-Algorithmus ist eine Methode, die in praktischen Anwendungen verwendet wird, um Bézier-Kurven für Zeichen- und andere Operationen auszuwerten und anzunähern. Im Vergleich zur vorherigen definitionbasierten Bewertungsmethode ist sie schneller und stabiler und näher an den Eigenschaften von Bézier-Kurven.

Hier beziehen wir uns auf zwei Artikel: link1 und link2

Zuerst wird Folgendes definiert:

Simply understanding Bézier curves.

Sehen Sie sich das obige β an. Es ist etwas verwirrend mit den hochgestellten und tiefgestellten Zeichen; Sie können zum Verständnis die folgende Dreiecksrekursion verwenden:

Simply understanding Bézier curves.

Die roten Kanten des Dreiecks in der obigen Abbildung sind die Kontrollpunkte der beiden Segmente geteilt durch t0. Um t0, P(t0) besser zu verstehen (d. h. β0(n)\beta_0^{(n)} β0(n) ), die Kontrollpunkte der beiden Kurven, können Sie sich auf die folgende Abbildung beziehen:

Simply understanding Bézier curves.

Die obige Abbildung zeigt die Beziehungen zwischen verschiedenen Punkten, wenn t=0,5.

Aus der Perspektive der „Interpolation“ kann der Berechnungsprozess auch als Folgendes verstanden werden:

  1. Die Mittelpunkte jedes Paares benachbarter Kontrollpunkte finden (weil t=0,5), also b01, b11, b21 (bitte entschuldigen Sie meine Notation; das Schreiben in LaTeX ist zu mühsam)
  2. Finden Sie den Mittelpunkt b02 auf b01−b11 und den Mittelpunkt b12 auf b11-b21
  3. Finden Sie den Mittelpunkt b03 auf b02−b12 ​ Tatsächlich ist die Essenz des De Casteljau-Algorithmus Interpolation und Iteration.

Kurvenzeichnung nach De Casteljau

Derzeit werden zwei Methoden beobachtet.

Eine Methode besteht darin, t in kleinen Schritten von 0 auf 1 zu durchlaufen (d. h. 0,01). Jedes Mal, wenn P(t) gesucht wird, wird zur Bestimmung eine rekursive Formel verwendet β0(n)\beta_0^{(n)} β0(n) .

Die andere Methode beinhaltet die Suche nach P(t=0,5) und dann wird für die beiden geteilten Kurven jeweils P(t=0,5) gesucht... Diese Unterteilung wird fortgesetzt, bis die Kurve angenähert ist.

Durchführung

Es fühlt sich immer unwirklich an, nur zuzuschauen, ohne zu üben.

Also habe ich meinen eigenen Implementierungscode für das Kurvenzeichnen geschrieben und ihn in einem Toolkit organisiert: Compilelife's Toolkit

Der entsprechende Kerncode ist hier

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/compilelife/simply-understanding-bezier-curves-39kh?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3