查找点是否位于由绘制贝塞尔函数创建的贝塞尔线上

本文关键字:创建 函数 是否 绘制 查找 | 更新日期: 2023-09-27 18:32:47

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

查找点是否位于由绘制贝塞尔函数创建的贝塞尔线上

在数学中进行分析是相当困难的,但内置的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);