Im vorherigen Artikel habe ich über drei Methoden zum Zeichnen von Kurven in Canvas gesprochen: arc, arcTo und quadraticCurveTo Sie alle haben eines gemeinsam: Das heißt, die Kurven, die Sie zeichnen, können nur zu einer Seite verlaufen. Der größte Unterschied zwischen der bezierCurveTo, über die wir heute sprechen, und ihnen besteht darin, dass sie zwei Kontrollpunkte hat, was bedeutet, dass Sie eine S-förmige Kurve zeichnen können.
bezierCurveTo, auch Bezier-Kurve genannt, wenn Sie bestimmte Zeichenwerkzeuge erlernt haben, können Sie es sofort verstehen.
Die Syntax von bezierCurveTo lautet wie folgt:
ctx.bezierCurveTo(x1,y1,x2,y2,x,y); Ich werde seine Parameter wie üblich erklären, (x1,y1) ist Die Koordinaten von Kontrollpunkt 1, (x2, y2) sind die Koordinaten von Kontrollpunkt 2 und (x, y) sind die Koordinaten seines Endpunkts. Wie bei quadraticCurveTo werden auch seine Startpunktkoordinaten durch moveTo voreingestellt.
BezierCurveTo benötigt also 4 Punkte, um eine Kurve zu zeichnen: Startpunkt, Endpunkt, Kontrollpunkt 1, Kontrollpunkt 2. Für die nachfolgende Erklärung gehe ich hier davon aus, dass Kontrollpunkt 1 dem Startpunkt entspricht , und Kontrollpunkt 2 entspricht dem Endpunkt
Hier müssen wir das alte Problem des Leinwandzeichnens noch einmal erwähnen, das heißt, das Zeichnen des Codes basiert ausschließlich auf Vermutungen und Sie müssen eine Aktualisierung durchführen, um zu wissen, wo gezeichnet werden soll.
Ich werde die gute Tradition von zuvor fortsetzen und einige Hilfslinien zeichnen, um allen das Verständnis zu erleichtern:
Hier zeichnen wir zunächst eine Kurve ähnlich quadraticCurveTo, die nur zu einer Seite geneigt ist. Diese Linie erscheint „glatt“, da die x-Koordinaten der Kontrollpunkte 1 und 2 gleich sind.
Zeichnen Sie nun eine weitere S-förmige Kurve, um zu beweisen, dass bezierCurveTo anders ist:Ändern Sie einfach die Koordinaten von Kontrollpunkt 1. Wenn die Koordinaten von Kontrollpunkt 1 und Kontrollpunkt 2 auf beiden Seiten der Grundlinie liegen, wird eine S-förmige Kurve gezeichnet. Liegen beide auf einer Seite der Grundlinie, hat dies einen ähnlichen Effekt wie bei quadraticCurveTo.
Die Situation in diesem Beispiel ist relativ einfach. Die Grundlinie (vom Startpunkt bis zum Endpunkt) ist jedoch in der Praxis meistens geneigt und die Situation ist viel komplizierter . Aber versuchen Sie es selbst