C# 用C语言编写Bezier曲线的名称#
我必须制作一个程序,使用C生成的图形来复制我用草书写的名字。扭曲是,我必须使用贝塞尔曲线。我已经调用了一个函数,使用4个点和重力概念生成贝塞尔曲线。我的问题是,做10条曲线最简单的方法是什么 这是我的贝塞尔曲线函数C# 用C语言编写Bezier曲线的名称#,c#,graphics,drawing,bezier,C#,Graphics,Drawing,Bezier,我必须制作一个程序,使用C生成的图形来复制我用草书写的名字。扭曲是,我必须使用贝塞尔曲线。我已经调用了一个函数,使用4个点和重力概念生成贝塞尔曲线。我的问题是,做10条曲线最简单的方法是什么 这是我的贝塞尔曲线函数 public static void bezierCurve( Graphics g, double p1x, double p1y, double p2x, double p2y, double p3x, double p3y,
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;
}
}
公共静态无效贝塞尔曲线(
图形g,
双p1x,双p1y,
双p2x,双p2y,
双p3x,双p3y,
双p4x,双p4y)
{
双t,r1x,r4x,r1y,r4y;
浮动x,y;
黑色钢笔=新钢笔(颜色为黑色);
r1x=3*(p2x-p1x);
r4x=3*(p4x-p3x);
r1y=3*(p2y-p1y);
r4y=3*(p4y-p3y);
t=0;
(t我建议使用一些矢量编辑软件,例如InkScape或Corel,使用该软件用beziers绘制您的名字,然后另存为.SVG。SVG格式很容易理解。将坐标从路径复制到程序中。或者,使用一张图纸手动获取坐标
C#已经有了绘制贝塞尔曲线的功能,请参见,这将比您的实现更高效(并产生更好的效果)。感谢您为我解决了这个问题。由于某种原因,它没有正确编码。