代码之家  ›  专栏  ›  技术社区  ›  wenz

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

  •  0
  • wenz  · 技术社区  · 9 年前

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

    1 回复  |  直到 9 年前
        1
  •  3
  •   TaW    9 年前

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