2010-12-08 4 views
3

Ich versuche, eine einfache abgerundete Spitze zu einem Rechteck zu erstellen. Ich konnte die Methode bezierCurveTo verwenden, um die Begrenzung zu erstellen, aber ich musste mit den y-Werten des Steuerpunkts herumspielen, um die korrekte Höhe der Kurve zu erhalten. Wenn ich die Breite habe und ich weiß, dass die Höhe, die die Kurve durchlaufen soll, eine Formel ist, um die y-Werte des Kontrollpunkts zu finden? die Funktion, die ich jetzt habe, istErmitteln der Höhe einer Bezier-Kurve in Leinwand

c.moveTo(130,55); 
c.bezierCurveTo(130,-18,0,-18,0,55); 

-18 ist das, was ich die y-Werte zu setzen hatte die Kurve zu bekommen, um etwa durch y pass = 0.

+0

Müssen Sie die Bezier-Kurve und ihre ganze Kraft verwenden, oder würde Ihnen ein einfaches, kreisförmiges 'ArcTo' geben, was Sie brauchen? – Phrogz

+0

@Phrogz Technisch nicht, aber ich mag, wie die Bezierkurve an den Seiten gerade ist, die in den geraden Abschnitt führen. Wie ich bereits erwähnt habe, habe ich etwas, das funktioniert. Ich habe mich gefragt, wie die Formel aussehen würde, wenn ich dieses Problem noch einmal hätte. – qw3n

Antwort

4

Ja, es gibt eine einfache Antwort für Diese eingeschränkte Version von Bezier-Kurven. Unter der Definition einer kubischen Bezier-Kurve von wikipedia here, und entlang der Kurve für den Mittelpunkt der Lösung (t = 0,5), wird der Minimalwert von y sein:

1/4 Ymax + 3/4 Ymin 

(Ymax wobei der y-Wert der Start- und Endpunkte und Ymin ist der Y-Wert der beiden Kontrollpunkte). Oder für den Mittelpunkt 0 zu sein,

Ymin = -1/3 Ymax. 

Also, da haben Sie Ymax = 55, Ymin sein muss -1/3 * 55 = -18,333 .. - deshalb 18 arbeitete in Ihrem Beispiel.

+0

Ich hätte diese Frage fast vergessen, danke für die Antwort. – qw3n

Verwandte Themen