У меня есть Безье линия, созданная C# DrawBezier
функции с четырьмя точками S(x1,y1)
, E(x2,y2)
, C1(x3,y3
), C2(x4,y4)
. S и E - конечные точки, а C1 и C2 - контрольные точки. Как проверить, находится ли точка p(x,y)
на линии Безье?Найти, если точка лежит на линии Безье создания По функции DrawBezier
0
A
ответ
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
Малый нит: почему вы проверка, если 3D-координат на 2d пути? –