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

时间:2016-01-31 16:13:40

标签: c# gdi+ bezier

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

1 个答案:

答案 0 :(得分:3)

在数学上分析这样做是相当困难的,但是内置的GDI +方法可以解决..:

创建完全相同的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;

当然,您可以将DrawBezier替换为DrawPath

 e.Graphics.DrawPath(yourPen, gp);