Написание имени с использованием кривых Безье в C # - PullRequest
0 голосов
/ 08 октября 2009

Мне нужно создать программу, использующую C # Generated Graphics, чтобы сделать копию моего имени, написанную мной курсивом. Твист, я должен использовать кривые Безье. Я уже вызвал функцию для построения кривых Безье, используя 4 точки и концепцию гравитации. Мой вопрос к вам, что было бы самым простым способом сделать около 10 кривых.

Вот моя функция для кривой Безье.

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;
    }
}

1 Ответ

0 голосов
/ 25 мая 2010

Я бы предложил взять какое-нибудь программное обеспечение для редактирования векторов, например, InkScape или Corel, нарисуйте свое имя с помощью безеров, используя это программное обеспечение, а затем сохраните как .SVG. Формат SVG легко понять, здесь приведен пример кодирования пути Безье . Скопируйте координаты пути в вашу программу. Или же используйте лист миллиметровки, чтобы получить координаты от руки.

В C # уже есть функция для рисования Безье, см. Graphics.DrawBezier , которая будет гораздо более эффективной (и даст более привлекательные результаты), чем ваша реализация.

...