logo
CSharp_Graphics

Физические и математические сплайны

Физический сплайн — это пластинка из дерева или другого гибкого материала. Физические сплайны использовались чертежниками для рисования кривых до появления удобных средств рисования математических сплайнов. Чертежники должны были размещать сплайн на листе бумаги и совмещать его с каждой точкой из заданного набора. Затем, проведя карандашом вдоль прижатой к бумаге кромки сплайна, можно было нарисовать нужную кривую. Один набор точек может порождать множество различных кривых в зависимости от свойств физического сплайна. Например, кривая, нарисованная с помощью жесткого сплайна будет отличаться от кривой, нарисованной с помощью очень гибкого сплайна.

Формулы, используемые для построения математических сплайнов, основаны на свойствах гибких стержней, за счет этого кривые, образованные математическими сплайнами, похожи на кривые, нарисованные с помощью физических сплайнов. Точно так же, как физические сплайны разной упругости будут порождать различные кривые для одного набора точек, математические сплайны с различным параметром упругости также будут порождать различные кривые, проходящие через один набор точек. На приведенном ниже рисунке изображены четыре фундаментальных сплайна, проходящих через один набор точек. Для каждого сплайна обозначена его упругость. Упругость, равная 0, соответствует бесконечной физической упругости, из-за которой соответствующая кривая соединяет каждые две соседние точки по кратчайшему пути (по прямой). Упругость, равная 1, соответствует отсутствию физической упругости, за счет которого сплайн занимает положение с наименьшим суммарным изгибом. Если значение упругости превышает 1, кривая начинает действовать как сдавленный берегами ручей, стремящийся увеличить изгиб своих излучин и течь по более длинному пути.

The four splines in the preceding illustration share the same tangent line at the starting point. The tangent is the line drawn from the starting point to the next point along the curve. Likewise, the shared tangent at the ending point is the line drawn from the ending point to the previous point on the curve.

To draw a cardinal spline, you need an instance of the Graphics class, a Pen, and an array of Point objects The instance of the Graphics class provides the DrawCurve method, which draws the spline, and the Pen stores attributes of the spline, such as line width and color. The array of Point objects stores the points that the curve will pass through. The following code example shows how to draw a cardinal spline that passes through the points in myPointArray. The third parameter is the tension.

myGraphics.DrawCurve(myPen, myPointArray, 1.5f);

Bézier Splines in GDI+

A Bézier spline is a curve specified by four points: two end points (p1 and p2) and two control points (c1 and c2). The curve begins at p1 and ends at p2. The curve does not pass through the control points, but the control points act as magnets, pulling the curve in certain directions and influencing the way the curve bends. The following illustration shows a Bézier curve along with its endpoints and control points.

The curve starts at p1 and moves toward the control point c1. The tangent line to the curve at p1 is the line drawn from p1 to c1. The tangent line at the endpoint p2 is the line drawn from c2 to p2.

--------

Все четыре сплайна на предыдущем рисунке обладают одинаковой касательной в начальной точке. Касательной к кривой в некоторой точке в простейшем случае называется линия, проходящая через эту точку и через ближайшую к ней точку на кривой. Аналогично, общей касательной к конечной точке называется линия, проведенная через конечную точку и предшествующую ей точку кривой.

Для рисования фундаментальнoго сплайна нужны объекты Graphics, Pen и массив объектов Point. Объект Graphics содержит метод DrawCurve, который выполняет непосредственное рисование сплайна, а объект Pen содержит атрибуты сплайна, такие как цвет и толщина линии. Массив объектов Point содержит все точки, через которые должна пройти кривая. В приведенном ниже примере кода демонстрируется рисование фундаментального сплайна, проходящего через точки, заданные в массиве myPointArray. Третьим параметром является упругость.

------

Сплайны Безье в GDI+

Сплайн Безье — это кривая, задаваемая четырьмя точками: двумя конечными точками (p1 и p2) и двумя контрольными точками (c1 и c2). Кривая начинается в точке p1 и заканчивается в точке p2. Кривая не проходит через контрольные точки. Эти точки действуют на кривую как магниты, растягивая кривую в нужных направлениях и влияя на ее изгиб. На приведенном ниже рисунке демонстрируется кривая Безье и все ее конечные и контрольные точки.

-------

Обратите внимание, что кривая начинается в точке p1 и дальше идет в направлении контрольной точки c1. Касательная к кривой в точке p1 проходит через точку c1. А касательная линия в конечной точке p2 проходит через точку c2.

Drawing Bézier Splines

To draw a Bézier spline, you need an instance of the Graphics class and a Pen. The instance of the Graphics class provides the DrawBezier method, and the Pen stores attributes, such as width and color, of the line used to render the curve. The Pen is passed as one of the arguments to the DrawBezier method. The remaining arguments passed to the DrawBezier method are the endpoints and the control points. The following example draws a Bézier spline with starting point (0, 0), control points (40, 20) and (80, 150), and ending point (100, 10):

myGraphics.DrawBezier(myPen, 0, 0, 40, 20, 80, 150, 100, 10);

The following illustration shows the curve, the control points, and two tangent lines.

Bézier splines were originally developed by Pierre Bézier for design in the automotive industry. They have since proven to be useful in many types of computer-aided design and are also used to define the outlines of fonts. Bézier splines can yield a wide variety of shapes, some of which are shown in the following illustration.