0

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

1 に答える 1

0

InkScape や Corel などのベクター編集ソフトウェアを使用し、そのソフトウェアを使用してベジエで名前を描き、.SVG として保存することをお勧めします。SVG 形式は理解しやすいです。ベジェ パスをエンコードする例を次に示します。座標をパスからプログラムにコピーします。または、方眼紙を使用して手で座標を取得します。

C# には、ベジエを描画するための関数が既にあります。Graphics.DrawBezierを参照してください。これは、実装よりもはるかに効率的です (そして見栄えの良い結果を生成します)。

于 2010-05-25T17:04:09.057 に答える