2016-01-31 4 views
0

У меня есть Безье линия, созданная C# DrawBezier функции с четырьмя точками S(x1,y1), E(x2,y2), C1(x3,y3), C2(x4,y4). S и E - конечные точки, а C1 и C2 - контрольные точки. Как проверить, находится ли точка p(x,y) на линии Безье?Найти, если точка лежит на линии Безье создания По функции DrawBezier

+1

Малый нит: почему вы проверка, если 3D-координат на 2d пути? –

ответ

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); 
+0

Я понимаю, спасибо – wenz