Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Методы вычерчивания графических примитивов
Линия Компонент.Canvas.LineTo(x, у) MoveTo(x, y), указав в качестве параметров координаты нового положения карандаша. Рис. 10.4. Форма приложения Координатная сетка Листинг 10.2. Оси координат и оцифрованная сетка unit grid_; Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Implementation {$R *.DFM} procedure TForm1.FormPaint(Sender: TObject); Var x0, y0: integer; // координаты начала координатных осей dx, dy: integer; // шаг координатной сетки (в пикселах) h, w: integer; //высота и ширина области вывода координатной сетки х, у: integer; lx, ly: real; // метки (оцифровка) линий сетки по X и Y dlx, dly: real; // шаг меток (оцифровки) линий сетки по X и Y cross: integer; // счетчик неоцифрованных линий сетки dcross: integer; // количество неоцифрованных линий между //оцифрованными Begin х0: =30; у0: =220; // оси начинаются в точке (40, 250) dx: =40; dy: =40; // шар координатной сетки 40 пикселов dcross: =1; // помечать линии сетки X: 1 — каждую; // 2 — через одну; 3 — через две; dlx: =0.5; // шаг меток оси X dly: =1.0; // шаг меток оси Y, метками будут: 1, 2, 3 и т. д. h: =200; w: =300; with form1.Canvas do begin cross: =dcross; MoveTo(x0, v0); LineTo(x0, y0-h); // ось X MoveTo(x0, y0); LineTo(x0+w, y0); // ось Y // засечки, сетка и оцифровка по оси X x: =x0+dx; lx: =dlx; Repeat MoveTo(x, y0-3); LineTo(x, yO+3); // засечка cross: =cross-l; if cross = 0 then // оцифровка Begin TextOut(x-8, y0+5, FloatToStr(lx)); cross: =dcross; end; Pen.Style: =psDot; MoveTo(x, y0-3); LineTo(x, y0-h); // линия сетки Pen.Style: =psSolid; lx: =lx+dlx; x: =x+dx; until (x> x0+w); // засечки, сетка и оцифровка по оси Y y: =y0-dy; ly: =dly; Repeat MoveTo(х0-3, у); LineTo(х0+3, у); // засечка TextOut(х0-20, у, FloatToStr(1у)); // оцифровка Pen.Style: =psDot; // пунктирная(короткая) линия MoveTo(х0+3, у); LineTo(x0+w, у); // линия сетки Pen.Style: =psSolid; // сплошная линия y: =y-dy; ly: =ly+dly; until (y< y0-h); end; end; End. Ломаная линия Метод polyline вычерчивает ломаную линию. В качестве параметра метод получает массив типа TPoint. Каждый элемент массива представляет собой запись, поля х и у которой содержат координаты точки перегиба ломаной. Метод Polyline вычерчивает ломаную линию, последовательно соединяя прямыми точки, координаты которых находятся в массиве: первую со второй, вторую с третьей, третью с четвертой и т. д. Листинг 10.3. График функции (использование метода Polyline) procedure TForm1.Button1Click(Sender: TObject); Var gr: array[1..50] of TPoint; // график — ломаная линия x0, y0: integer; // координаты точки начала координат dx, dy: integer; // шаг координатной сетки по осям X и Y i: integer; Begin х0: = 10; у0: = 200; dx: = 5; dy: = 5; // заполним массив gr for i: =l to 50 do begin gr[i].x: = x0 + (i-l)*dx; gr[i].y: = y0 - Data[i]*dy; end; // строим график with forml.Canvas do begin MoveTo(x0, y0); LineTo(x0, 10); // ось Y MoveTo(x0, y0); LineTo(200, y0); // ось X Polyline(gr); // график end; end; Метод Polyline можно использовать для вычерчивания замкнутых контуров. Для этого надо, чтобы первый и последний элементы массива содержали координаты одной и той же точки. Листинг 10.4. Вычерчивание замкнутого контура (звезды) в точке нажатия кнопки мыши unit Stars_; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class (TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Forml: TForml; Implementation {$R *.dfm} // вычерчивает звезду procedure StarLine(x0, y0, r: integer; Canvas: TCanvas); // x0, y0 — координаты центра звезды //r — радиус заезды Var р: array [1.. 11] of TPoint; // массив координат лучей и впадин a: integer; // угол между осью ОХ и прямой, соединяющей // центр звезды и конец луча или впадину i: integer; Begin а: = 18; // строим от правого гор. луча for i: =l to 10 do begin if (i mod 2=0) then begin // впадина p[i].x: = x0+Round(r/2*cos(a*pi/180) ); p[i].y: =y0-Round(r/2*sin(a*pi/180) ); End else begin // луч [i].x: =x0+Round(r*cos (a*pi/180) ); [i].y: =y0-Round(r*sin(a*pi/180) ); end; a: = a+36; end; p[ll].X: = p[l].X; // чтобы замкнуть контур звезды Canvas.Polyline(р); // начертить звезду end; // нажатие кнопки мыши procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin if Button = mbLeft // нажата левая кнопка? then Form1.Canvas.Pen.Color: = clRed else Form1.Canvas.Pen.Color: = clGreen; StarLine(x, y, 30, Forml. Canvas ); end; End. Рис.10.5. Звезда Примечание Обратите внимание, что размер массива р на единицу больше, чем количество концов и впадин звезды, и что значения первого и последнего элементов массива совпадают. Окружность и эллипс Объект.Canvas.Ellipse(x1, y1, х2, у2) где:
Рис. 10.6. Значения параметров метода Ellipse определяют вид геометрической фигуры Дуга Объект.Canvas.Arc(x1, y1, х2, у2, х3, у3, х4, у4) где:
Дуга вычерчивается против часовой стрелки от начальной точки к конечной (рис. 10.7). Рис. 10.7. Значения параметров метода Arc определяют дугу как часть эллипса (окружности) Прямоугольник Объект.Canvas.Rectangle(x1, y1, x2, y2) где:
Метод RoundRec тоже вычерчивает прямоугольник, но со скругленными углами. Объект.Canvas.RoundRec(x1, y1, х2, у2, х3, у3) где:
Рис. 10.8. Метод RoundRec вычерчивает прямоугольник со скругленными углами procedure TForm1.Button1Click(Sender: TObject); Var r1, r2: TRect; // координаты углов прямоугольников Begin // заполнение полей структуры // зададим координаты углов прямоугольников r1: = Rect(20, 20, 60, 40); r2: = Rect(10, 10, 40, 50); with fоrm1.Canvas do begin Brush.Color: = clRed; FillRect(r1); // закрашенный прямоугольник Brush.Color: = clGreen; FrameRect(r2}; // только граница прямоугольника end; end; Многоугольник Метод Polygon вычерчивает многоугольник Ниже приведена процедура, которая, используя метод polygon, вычерчивает треугольник: procedure TForm1.Button2Click(Sender: TObject); Var pol: array[1..3] of TPoint; // координаты точек треугольника Begin pol[1].x: = 10; polf1].y: = 50; pol[2].x: = 40; pol[2].y: = 10; pol[3].х: = 70; pol[3].у: = 50; Forml.Canvas.Polygon(pol); end; Сектор Объект. Canvas.Pie(x1, y1, x2, y2, х3, у3, х4, у4) где:
Рис. 10.9. Значения параметров метода Pie определяют сектор как часть эллипса (окружности) Точка Form1.Canvas.Pixels[10, 10]: =clRed окрашивает точку поверхности формы в красный цвет. Размерность массива pixels определяется размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) задается значениями свойств ClientWidth и ClientHeight, а размер графической поверхности компонента image — значениями свойств Width и Height. Левой верхней точке рабочей области формы соответствует элемент pixels [0, 0], а правой нижней - Pixels[Clientwidth - 1, ClientHeight - 1]. Например, если некоторая функция f(x) может принимать значения от нуля до 1000, и для вывода ее графика используется область формы высотой в 250 пикселов, то масштаб оси Y вычисляется по формуле: т = 250/1000. Таким образом, значению f(x) = 70 будет соответствовать точка с координатой Y =233. Значение координаты Y вычислено по формуле Y= h -f(x) ´ m = 250 – 70 ´ (250/1000), где h - высота области построения графика. Примеры построения графиков функций у = 2 sin(x) ex/5. Популярное:
|
Последнее изменение этой страницы: 2016-03-15; Просмотров: 1190; Нарушение авторского права страницы