2009-08-10 3 views
4

J'ai une polyligne qui se rapproche d'une courbe, et je veux dessiner comme une courbe lisse dans PostScript, qui prend en charge le dessin de courbe de Bézier. Pour ce faire, j'ai besoin de générer deux points de contrôle entre chaque paire de points de polyligne. (Je ne peux pas obtenir la courbe d'origine de la source, juste la polyligne.)Comment créer une courbe de Bézier pour représenter une polyligne lissée?

J'ai eu un certain succès en utilisant des splines cardinales de this description, mais les paramètres sont différents de là Wikipedia et GDIPlus.DrawCurve, tous deux se réfèrent à tension. MS n'a pas de détails, et Wikipedia a des détails incomplets (la spline cardinale ignore les valeurs x?). Quelles sont les formules pour les points de contrôle en fonction de la tension?

Répondre

14

Voir ce lien http://www.ibiblio.org/e-notes/Splines/Cardinal.htm qui fournit des formules simples pouvant être utilisées pour calculer des points de contrôle de Bézier pour une courbe lisse multi-segments.

Les équations sont très simples mais pour ceux qui ne veulent pas répéter les calculs que je fournis mes résultats:

Soit Pi (i = 1..n) soient les points de polyligne.

Tout d'abord, apprendre comment calculer les dérivés sur Pi: ​​

P1' = (P2 - P1)/a 
Pi' = (Pi+1 - Pi-1)/a (for i=2..n-1) 
Pn' = (Pn - Pn-1)/a 

où "a" est un coeffecient (ce qui signifie probablement que vous avez mentionné "tension"), par exemple a = 2.

Ensuite, pour chaque segment i (i = 1..n-1) de Pi à Pi + 1, points de contrôle de Bézier B1i et B2i serait:

B1i = Pi + Pi'/3 
B2i = Pi+1 - Pi+1'/3 
+1

J'espérais que quelqu'un connaissait définitivement, mais En inspectant les résultats de DrawPath, je pense que la tension est de 2/a dans les termes utilisés dans votre réponse. – xan

+0

génial! Je cherchais un moment pour une solution aussi courte et efficace :) – mmbrian

0

Vous pouvez le faire avec un processus en deux étapes: d'abord faire une b-spline cubique et ensuite obtenir les courbes de Bézier cubiques à partir de cela.

L'astuce avec l'ajustement des courbes de Bézier correspond aux dérivées aux extrémités du segment, et c'est essentiellement ce que fait la spline. Si vous pouvez obtenir la représentation de la spline, elle doit avoir les points pour les points de fin et le point de contrôle pour chaque segment. Sinon, vous pouvez déterminer les pentes à chaque extrémité du segment et le point de contrôle sera l'intersection des lignes extrapolées.

Questions connexes