Найти точки на кривой Безье. (GDI +) - PullRequest
0 голосов
/ 06 января 2011

Не могли бы вы помочь мне сделать это с помощью c #.

У меня есть вызов GDI +, как показано ниже:

graphics.FillPie(Brushes.White, _
                 new Rectangle(0, 0, 400, 150), 0 - 90, 77.783651160272726f);

graphics.DrawArc(new System.Drawing.Pen(Brushes.Black, 2), _
                 new RectangleF(0, 0, 400, 150), 0 - 90, 77.783651160272726f);

Мое требование - найти все точки вдоль кривой / фигуры Безье (круг, дуга).

Т.е. мне нужно перерисовать фигуру в моем методе, который принимает только массив точек . У меня есть только координаты прямоугольника, начальный угол и угол развертки. Может кто-нибудь сообщить мне, есть ли в .net какой-либо встроенный метод для расчета этого или есть какой-нибудь простой способ найти этот.

Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация. Пожалуйста, помогите мне, потому что это очень важно для меня, потому что я не гений в математике.

Заранее спасибо.

С уважением, Джеймс

Ответы [ 4 ]

3 голосов
/ 22 мая 2011

Я сделал математику и создал функцию BezierCoordinates в приведенной ниже статье в проекте кода.

* Кривая Безье 1004 *

Это решение сделано в C #, отображается в Silverlight.

1 голос
/ 22 ноября 2012

Добавьте вашу дугу / кривую к объекту GraphicsPath, используйте метод Flatten для аппроксимации кривых Безье на пути в виде отрезков и используйте свойство PathPoints , чтобы получить массивбаллов.

1 голос
/ 06 января 2011

Вы действительно должны представлять это как массив точек?

Если вы можете быть гибкими в отношении подписи вашего метода и вместо Point[] принять GraphicsPath, тогда вы можете представитьэта кривая в C # путем объединения двух частей.

РЕДАКТИРОВАТЬ: Добавление примера

Например, вы можете создать GraphicsPath, например:

GraphicsPath path = new GraphicsPath();
path.AddPie(new Rectangle(0, 0, 400, 150), -90, 77.78f);
path.AddArc(new Rectangle(0, 0, 400, 150), -90, 77.78f);

Позже вы можете использовать его для рисования графики с помощью метода Graphics.DrawPath или для доступа к данным графического пути через свойства GraphicsPath.PathPoints, GraphicsPath.PathTypes и GraphicsPath.PointCount.

0 голосов
/ 06 января 2011

Вам понадобится немного математики, но, к счастью, ничего сумасшедшего.Этот сайт объясняет, как нарисовать круг, вычисляя на нем точки:

http://www.nsbasic.com/palm/info/technotes/TN25a.htm

Это не в C #, но должно дать вам представление о том, как это работает.Math.Sin() и Math.Cos() - это методы .NET sin и cos.

...