查找点是否位于由绘制贝塞尔函数创建的贝塞尔线上
本文关键字:创建 函数 是否 绘制 查找 | 更新日期: 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);