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# 已经有一个绘制 Bezier 的函数,请参阅Graphics.DrawBezier,这将比您的实现更有效(并产生更好看的结果)。

于 2010-05-25T17:04:09.057 回答