2009-10-08 5 views
0

Je dois créer un programme utilisant C# Generated Graphics pour créer une réplique de mon nom que j'ai écrite en cursive. Twist est, je dois utiliser des courbes de Bézier. J'ai déjà appelé une fonction pour faire des courbes de Bézier en utilisant 4 points et un concept de gravité. Ma question est la suivante: quelle serait la façon la plus simple de faire 10 courbes?Écrire un nom en utilisant des courbes de Bézier en C#

Voici ma fonction pour une courbe de Bézier.

public static void bezierCurve(
    Graphics g, 
    double p1x, double p1y, 
    double p2x, double p2y, 
    double p3x, double p3y, 
    double p4x, double p4y) 
{ 
    double t, r1x, r4x, r1y, r4y; 
    float x, y; 

    Pen black = new Pen(Color.Black); 

    r1x = 3 * (p2x - p1x); 
    r4x = 3 * (p4x - p3x); 

    r1y = 3 * (p2y - p1y); 
    r4y = 3 * (p4y - p3y); 

    t = 0; 
    while (t <= 1) 
    { 
     x = (float) ((2 * Math.Pow(t, 3) - 3 * Math.Pow(t, 2) + 1) * p1x 
      + (-2 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2)) * p4x 
      + (Math.Pow(t, 3) - 2 * Math.Pow(t, 2) + t) * r1x 
      + (Math.Pow(t, 3) - Math.Pow(t, 2)) * r4x); 
     y = (float) ((2 * Math.Pow(t, 3) - 3 * Math.Pow(t, 2) + 1) * p1y 
      + (-2 * Math.Pow(t, 3) + 3 * Math.Pow(t, 2)) * p1y 
      + (Math.Pow(t, 3) - 2 * Math.Pow(t, 2) + t) * r1y 
      + (Math.Pow(t, 3) - Math.Pow(t, 2)) * r4y); 

     g.DrawRectangle(black, x, y, 1, 1); 

     t = t + 0.01; 
    } 
} 
+0

Merci d'avoir réglé cela pour moi Drew. Il ne codait pas correctement pour une raison quelconque. – Cistoran

Répondre

0

Je suggère de prendre un logiciel d'édition de vecteur, par exemple InkScape ou Corel, dessinez votre nom avec des beziers en utilisant ce logiciel, puis enregistrez-les au format .SVG. Le format SVG est facile à comprendre, here is an example of encoding a bezier path. Copiez les coordonnées du chemin dans votre programme. Vous pouvez également utiliser un morceau de papier millimétré pour obtenir les coordonnées à la main. C# a déjà une fonction pour dessiner Beziers, voir Graphics.DrawBezier, qui va être beaucoup plus efficace (et produire des résultats plus beaux) que votre implémentation.

Questions connexes