
Bezierkurven
Die Logik hinter der Konstruktion von Bezier-Kurven wird aus der folgenden Animation gut verstanden:

Um die Formel direkt aus der grafischen Darstellung zu erhalten, reicht es aus, eine Hilfsfunktion für die lineare Interpolation zwischen zwei Punkten zu definieren, bei der beim Ändern des Parameters t von 0 auf 1 Zwischenwerte von a nach b zurückgegeben werden :
Hinweis
- lerp, blend, mix - . .
Mit seiner Hilfe können Sie konsequent die notwendigen Punkte finden - zuerst finden
und
und dann durch sie finden
Wenn Sie möchten, können Sie die Funktionen ineinander ersetzen und verkürzen. Dies vereinfacht zwar die Berechnungen nicht besonders, ermöglicht es Ihnen jedoch, die Kurven auf eine beliebige Anzahl von Kontrollpunkten (über Bernstein-Polynome) zu verallgemeinern. In unserem Fall bekommen wir
Das Erhöhen der Reihenfolge der Kurven wird trivial erreicht - die Anfangspunkte werden nicht konstant gesetzt, sondern als Ergebnis der Interpolation zwischen n + 1 anderen Kontrollpunkten:

Hinweis
, . .
Kreiskurven
Kreisbogen
Um einen Kreisbogen auf ähnliche Weise zu erstellen, muss die entsprechende Konstruktionslogik ermittelt werden - analog zum Zeichnen eines Kreises mit einem Kompass.

Anfangs kennen wir den Mittelpunkt des Kreises d nicht - er wird durch den Schnittpunkt von Senkrechten zu den Tangenten an den Punkten a und b (im Folgenden Knoten) gefunden; Die Tangenten selbst werden unter Verwendung von Punkt c (im Folgenden als Richtlinie bezeichnet) angegeben. Um einen beliebigen Kreisbogen (weniger als 180 °) zu erzeugen, ist es ausreichend, dass die Abstände vom Richtungspunkt zu den Knotenpunkten gleich sind.

Ellipsenbogen
Das Konstruieren eines Ellipsenbogens ist bereits schwieriger - Sie benötigen zwei Vektoren, die sich in verschiedene Richtungen drehen ( weitere Details hier ).

Mit der obigen Methode zum Ermitteln des Punktes d können wir keinen beliebigen Ellipsenbogen mehr erstellen - nur von 0 ° bis 90 ° (einschließlich um einen bestimmten Winkel gedreht).
Arc Hypotrochoid
Wenn Sie die Bedingung festlegen, dass die Vektoren zu Beginn und am Ende der Zeichnung auf einer geraden Linie liegen, erhalten Sie in allen anderen Fällen den Hypotrochoidbogen . Dieser Zustand ist nicht zufällig und garantiert (zusätzlich zur eindeutigen Definition der Kurve) das Zusammentreffen der Tangenten an den Knotenpunkten. Infolgedessen sind die Winkelpfade, die beide Vektoren zurücklegen, unterschiedlich, summieren sich jedoch immer noch zu 180 °.

Wie sich die Form der Kurve in Abhängigkeit von der Position des Führungspunkts ändert, ist in der folgenden Animation zu sehen:

Algorithmus
Da wir hier Rotationen auf einer zweidimensionalen Ebene haben, ist es zweckmäßig, die Mathematik der Konstruktion dieser Kurven in komplexen Zahlen zu beschreiben.
1) Finden Sie den Schnittpunkt der Normalen der Tangenten, die vom Richtungspunkt zu den Knotenpunkten gezogen werden:
(hier bedeutet das Sternchen komplexe Konjugation).
2) Wenn wir d kennen , finden wir die Längen der Normalen
und ihre Summe und Differenz
3) Wir finden den Einheitsvektor, von dem aus die Konstruktion beginnt
Hinweis
sign(x).
4) Finden Sie die Winkelpfade, die jeder der Vektoren passieren muss
Hinweis
, — . — , . . .
, — , - ; .
. ,
— - .
, — , - ; .
. ,
— - .
5) Wenn t mit einem Schritt sukzessive von 0 auf 1 geändert wird, finden wir den zur Kurve gehörenden Punkt durch die Formel
Kreisförmige Keile
Genau wie Bézier-Kurven können diese Kurven kombiniert werden, um stückweise kontinuierliche Splines zu erstellen. Um die Glätte an den Ankerpunkten zu gewährleisten (Andocken), muss der Ankerpunkt mit zwei benachbarten Richtungspunkten übereinstimmen. Dazu können Sie Ankerpunkte nicht explizit, sondern durch Interpolation von Führungspunkten angeben. Sie können auch überhaupt nicht spezifiziert werden und werden vollautomatisch berechnet - zum Beispiel als Durchschnitt zwischen den Führungspunkten:

Rechts wurde zum Vergleich der gleiche Ansatz für Bezier-Kurven 2. Ordnung verwendet.
Noten und Nuancen
Im Gegensatz zu Bezier-Kurven liegt die Kurve hier beispielsweise nicht immer in der Form der Linien, die beispielsweise die Kontrollpunkte verbinden

Darüber hinaus gibt es einen entarteten Fall, der separat behandelt werden muss - wenn der Richtungspunkt auf derselben Linie wie die Ankerpunkte liegt. In diesem Fall degeneriert die Kurve zu einer geraden Linie, und beim Versuch, den Punkt d zu berechnen , tritt eine Division durch Null auf.
Diese Kurven haben auch Einschränkungen hinsichtlich der Krümmung der Linie, da der Algorithmus den kleinsten Pfad auswählt und die Kurve nicht mehr als 180 ° drehen kann. Dies führt dazu, dass bei stückweise kontinuierlicher Interpolation an einer bestimmten Position der Richtungspunkte scharfe Ecken auftreten können (rechts - die gleichen Punkte für Bezier):

Fazit
Die Weiterentwicklung des betrachteten Verfahrens zum Erstellen von Kurven ist eine Zunahme der Anzahl von Vektoren, die an der Konstruktion der Kurve beteiligt sind, und dementsprechend eine Zunahme der Anzahl von Richtungspunkten. Im Gegensatz zu Bezier-Kurven ist eine Erhöhung der Reihenfolge hier jedoch nicht offensichtlich und erfordert eine separate nachdenkliche Reflexion. Es sind auch verschiedene Methoden zum Kombinieren mit Bezier-Kurven möglich - insbesondere die Interpolation des Mittelpunkts des Kreises der Zeichnungsvektoren.
Die betrachtete Methode zur Erstellung von Kurven ist auch nicht die einzige, bei der es sich in einem bestimmten Fall um Kreisbögen und eine Ellipse handelt. Zumindest eine Ellipse kann durch den Schnitt von geraden Linien in einem Parallelogramm erstellt werden(Der Autor ist jedoch in dieser Version fehlgeschlagen). Es ist möglich, dass es andere Lösungen gibt, einschließlich der im Artikel beschriebenen Optionen. Schreiben Sie in die Kommentare, wenn Sie etwas zu diesem Thema wissen.
Der Quellcode für den Artikel kann von GitHub heruntergeladen werden .