Фундаментальные сплайны в GDI+

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

Cardinal Spline

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

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

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

Cardinal Splines

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

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

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

См. также