Поделиться через


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

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

Иллюстрация, показывающая кардинальный сплайн, проходящий через шесть определенных точек

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

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

Иллюстрация, показывающая четыре кардинальных сплайна через те же три точки

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

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

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