Лаб.раб.4. Теоретические сведения
Скачать 57.84 Kb.
|
Рисование сплайнами и кривыми Безье Теоретические сведения Линии, также как прямоугольники и эллипсы, являются графическими примитивами. Для того, чтобы нарисовать отрезок прямой, надо указать координаты начала (Point start) и конца (Point end) отрезка, выбрать перо (pen) для рисования и применить метод объекта g.DrawLine(pen, start, end). Для рисования незамкнутой ломаной, состоящей из отрезков, нужно задать массив последовательных точек Point[] pm и применить метод g.DrawLines(pen, pm). Если в качестве последней точки массива указать координаты первой точки, то контур станет замкнутым. Для рисования кривых следует использовать методы DrawCurve() или DrawCloseCurve() для рисования сплайном, или же DrawBezier() и DrawBeziers() для рисования кривых Безье. Сплайн (основной или фундаментальный сплайн, аналог лекала в черчении) — это последовательность отдельных кривых, объединенных в одну большую кривую. Сплайн задается массивом точек и параметром упругости. Сплайн обязательно проходит через заданные массивом pm точки на плоскости, а параметр упругости (elasticity — вещественное число типа float) определяет плавность их соединения. Если упругость = 0.0f (бесконечная физическая упругость), то соединение точек будет выполнено прямыми отрезками. Если упругость = 1.0f (отсутствие физической упругости), то кривая имеет наименьший суммарный изгиб. Если упругость > 1.0f, то кривая напоминает сдавленный берегами ручей, стремящийся увеличить изгиб своих излучин и течь по более длинному пути. Лучше всего исследовать влияние упругости, меняя ее и рисуя сплайн заново. Для вызова метода достаточно написать g.DrawCurve(pen, pm, elasticity, FillMode.Alternate); — незамкнутый сплайн или g.DrawClosedCurve(pen, pm, elasticity, FillMode.Alternate); — замкнутый сплайн. Отличие второго метода от первого в том, что последняя точка массива добавляется от первой (eё можно не добавлять к массиву). Кривой Безье называется кривая, задаваемая полиномом 3 порядка: y=ax3+bx2+cx+d. То есть для ее определения нужно задать четыре параметра (a,b,c,d). Кривые Безье используются очень часто в 2d- и 3d-графике. Они позволяют задавать любой тип соединений («сшивания») кривых, в этом они являются более универсальными, чем рассмотренные выше сплайны (для которых кроме заданных точек дополнительно вводится только один параметр — упругость). Для полного определения кривой Безье, проходящей через начальную (start) и конечную (finish) точки необходимо задать еще две управляющие точки (control1 и control2), задающих касательные к этим точкам и радиусы кривизны. Отдаляя управляющую точку control1 от точки start, мы увеличиваем радиус кривизны, смещая ее относительно точки start, мы изменяем направление касательной к кривой в точке start. Все это справедливо и для пары finish-control2. Эти четыре точки полностью определяют коэффициенты (a,b,c,d) кривой Безье. Требуется нарисовать объекты 2d-графики, используя плавные кривые. Наши действия: Создайте проект windows.form размером 900х900 Определяем использование пространства имен System.Drawing.Drawing2D; Первоначально необходимо задать холст: InitializeComponent(); g = Graphics.FromHwnd(this.Handle); g.SmoothingMode = SmoothingMode.AntiAlias; Для создания требуемого рисунка используется метод DrawBezier(Pen, Point, Point, Point, Point определяемый четырьмя структурами Point. g.DrawBezier(new Pen(Color.Black, 3), start, control1, control2, finish); Для создания направляющих используются методы из пространства имен System.Drawing SolidBrush br = new SolidBrush(Color.Green); Pen pen = new Pen(Color.Green, 1); g.FillEllipse(br, start.X - 5, start.Y - 5, 11, 11); g.FillEllipse(br, control1.X - 5, control1.Y - 5, 11, 11); g.FillEllipse(br, control2.X - 5, control2.Y - 5, 11, 11); g.FillEllipse(br, finish.X - 5, finish.Y - 5, 11, 11); g.DrawLine(pen, start, control1); / g.DrawLine(pen, finish, control2); Для тех, кто чувствует в себе силы добавить в программу функционал изменяющий форму кривой в зависимости от положения ручек (манипуляции ручками можно осуществлять или по средствам мышки, или по средствам текст бокс) |