查找点是否位于由 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);
我有由 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);