Dies ist für eine iPad-Anwendung, aber es ist im Wesentlichen eine mathematische Frage.Mit einer Bezier-Kurve eine Spirale zeichnen
Ich muss einen Kreisbogen mit unterschiedlicher (monoton steigender) Linienbreite zeichnen. Am Anfang der Kurve hätte es eine Anfangsdicke (sagen wir 2 Punkte) und dann würde die Dicke gleichmäßig bis zum Ende des Bogens ansteigen, wo es die größte Dicke hätte (sagen wir 12 Punkte).
Ich denke, der beste Weg, dies zu erreichen ist, indem Sie einen UIBezierPath erstellen und die Form ausfüllen. Mein erster Versuch war es, zwei Kreisbögen (mit versetzten Zentren) zu verwenden, und das hat bis zu 90 ° funktioniert, aber der Bogen wird oft zwischen 90 ° und 180 ° liegen, so dass der Ansatz ihn nicht schneidet.
My aktuelle Ansatz ist eine leichte Spirale zu machen (eine geringfügig von den Kreisbogen wuchsen und eine geringfügig schrumpfen) Bezier-quad oder kubische Kurven verwenden. Die Frage ist wo setze ich die Kontrollpunkte so, dass die Abweichung vom Kreisbogen (aka die Form "Dicke") der Wert ist, den ich will.
Constraints:
- Die Form muss in der Lage sein, in einem beliebigen Winkel zu beginnen und enden (innerhalb von 180 ° voneinander)
- Die „Dicke“ der Form (Abweichung vom Kreis) sind beginnen und mit den gegebenen Werten
- die „Dicke“ monoton erhöhen enden muss (es ist nicht immer größer und dann wieder kleiner)
- es für das Auge glatt auszusehen hat, kann es keine scharfen Kurven sein
Ich bin offen für andere Lösungen.
Das sieht wirklich gut aus! Du hast mir eine Menge Arbeit erspart. Dies ist so viel einfacher als der Ansatz, an dem ich arbeitete (die Bezier-Polynomgleichungen für die Spirale zu lösen). Ich habe es für ein Vielfaches von 90 ° arbeiten lassen, aber willkürliche Winkel würden ein Schmerz sein. Das ist viel besser ... –
@JonHull Froh, dass es dir gefällt. Ich habe gerade gemerkt, dass ich implizit davon ausgegangen bin, dass "endingThickness" = "startingThickness", aber du solltest deine Eingabeparameter leicht so arrangieren können, dass diese Bedingung erfüllt ist. Wenn nicht, kann es Szenarien geben, in denen die "projectedEndingThickness" negativ ist, und dann kann ich mich bezüglich der Algebra nicht mehr sicher sein. Es könnte noch funktionieren, aber ich habe es nicht getestet. – inwit
Oh gute Arbeit bro ,,,, du bist ein echter Lebensretter ,,, danke – Dhiru