25 Juni 2008

Bézierkurven 2

...ich meine mich ja daran erinnern zu können, irgendwann mal mit Vektorrechnung in Berührung gekommen zu sein: Für das 'Problem', aus der in SVG mit 'smooth curveto' angegebenen Kurve eine 'normale' zu bauen, stellt sich nun also die Frage nach dem Startpunkt und dessen Kontrollpunkt. Erstmal das Triviale: Der Startpunkt der zweiten Bézierkurve ist der Endpunkt der ersten, also der Punkt B (250,200) - man kann demnach als Daten für den Pfad statt d="M100,200 C100,100 320,80 250,200 S400,300 400,200" auch d="M100,200 C100,100 320,80 250,200 M 250,200 C x,y 400,300 400,200" angeben.
Es fehlen die Koordinaten (x,y) des gespiegelten Kontrollpunktes S2 (hier S2'), die sich aber (SVG macht das schließlich auch) recht einfach aus den Punkten S2 und B berechnen lassen: Zuerst 'bauen' wir uns den Richtungsvektor aus B-S2, also (250,200)-(320,80)=(-70,120), und gehen dann von B aus in diese Richtung zu unserem neuen Kontrollpunkt S2', also (x,y)=(250,200)+(-70,120)=(180,320). Der Kontrollpunkt für unseren Startpunkt B ist also S2' (180,320).
Die Daten für unsere zwei hintereinandergehängten Kurven sind also:
d="M100,200 C100,100 320,80 250,200 M 250,200 C 180,320 400,300 400,200"
Das Bild zeigt neben den Anfangs-, End- und Kontrollpunken (der berechnete Kontrollpunkt in blau) und den Tangenten die beiden Bézierkurven, in rot den Pfad mit 'smooth curveto', in schwarz den mit der Angabe von M, C und wieder M, C. Sieht fast so aus, als würde es stimmen - hoffen wir mal das Beste.

Labels: , ,