Сплайн
Определим шутливо сплайн, как «ломаную, которая хочет стать кривой». Задается сплайн, как и ломаная, массивом точек. Метод DrawCurve рисует сплайн, то есть соединяет соседние точки массива плавной кривой. Степень «желания» стать кривой, определяет третий параметр метода, так называемое напряжение (tension). Если он равен нулю, то и «желание нулевое», а значит сплайн остается ломаной, как вы и видите на самой левой фигуре из Рис. 17.5. При увеличении численного значения этого параметра сплайн становится все более и более «кривым», что вы можете видеть на остальных фигурах. Если параметр не указывать, он считается равным 0,5.
Вот код для рисования 4 сплайнов-«лебедей» для одной и той же конфигурации из 5 точек:
Dim Гр As Graphics = Me.CreateGraphics
Dim Массив_точек() As Point = {New Point(50, 20), New Point(70, 10), New Point(30, 100), _
New Point(70, 100), New Point(80, 80)}
Гр.DrawCurve(Pens.Black, Массив_точек, 0)
Гр.TranslateTransform(100, 0) 'Смещаем начало координат
Гр.DrawCurve(Pens.Black, Массив_точек, 0.3)
Гр.TranslateTransform(100, 0) 'Смещаем начало координат
Гр.DrawCurve(Pens.Black, Массив_точек, 0.5)
Гр.TranslateTransform(100, 0) 'Смещаем начало координат
Гр.DrawCurve(Pens.Black, Массив_точек, 0.8)
Вот результат (Рис. 17.5).
Рис. 17.5
Пояснения: Чтобы фигуры сплайнов не накладывались друг на друга, я применил сдвиг вправо системы координат.
Этот метод хорош для построения сглаженных графиков по точкам, полученным экспериментально. Или для рисования контура береговой линии, заданной несколькими точками.
Фигура сплайна может, конечно, самопересекаться.
Аналогично методу DrawPolygon для создания замкнутой ломаной существует метод DrawClosedCurve для создания замкнутого сплайна.
Аналогично методу FillPolygon для заливки многоугольника существует метод FillClosedCurve для заливки сплайна.