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