查找点是否位于由 DrawBezier 函数创建的 Bezier 线上

Find if point lies on Bezier line created By DrawBezier function

我有由 C# DrawBezier 函数创建的贝塞尔线,有四个点 S(x1,y1)E(x2,y2)C1(x3,y3)、C2(x4,y4)。 S和E是端点,C1和C2是控制点。我如何检查点 p(x,y) 是否位于贝塞尔线上?

在数学中进行分析相当困难,但是内置的 GDI+ 方法可以解决问题......:[=​​18=]

创建一个完全相同的GraphicsPath并使用GraphicsPath.IsVisible(Point)方法

 using System.Drawing.Drawing2D;
 ..

假设您像这样绘制贝塞尔曲线:

 e.Graphics.DrawBezier(yourPen, yourParameterList );

然后这会告诉你一个点是否在上面:

 GraphicsPath gp = new GraphicsPath();
 gp.AddBezier(yourParameterList);
 if (gp.IsVisible(yourPoint)) .. //do your stuff;

当然你可以用DrawPath代替DrawBezier:

 e.Graphics.DrawPath(yourPen, gp);