![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Методы вычерчивания графических примитивов
Линия Компонент.Canvas.LineTo(x,у) MoveTo(x,y), указав в качестве параметров координаты нового положения карандаша. Рис. 10.4. Форма приложения Координатная сетка Листинг 10.2. Оси координат и оцифрованная сетка unitgrid_; Interface usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class(TForm) procedureFormPaint(Sender: TObject); private{ Private declarations } public{ Public declarations } end; varForm1: TForm1; Implementation {$R *.DFM} procedureTForm1.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; withform1.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) procedureTForm1.Button1Click(Sender: TObject); Var gr: array[1..50] ofTPoint; // график — ломаная линия x0,y0: integer; // координаты точки начала координат dx,dy: integer; // шаг координатной сетки по осям X и Y i: integer; Begin х0 := 10; у0 := 200; dx :=5;dy := 5; // заполним массив gr fori:=l to50 do begin gr[i].x := x0 + (i-l)*dx; gr[i].y := y0 - Data[i]*dy; end; // строим график withforml.Canvas do begin MoveTo(x0,y0); LineTo(x0,10); // ось Y MoveTo(x0,y0); LineTo(200,y0); // ось X Polyline(gr); // график end; end; Метод Polyline можно использовать для вычерчивания замкнутых контуров. Для этого надо, чтобы первый и последний элементы массива содержали координаты одной и той же точки. Листинг 10.4 . Вычерчивание замкнутого контура (звезды) в точке нажатия кнопки мыши unitStars_; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class(TForm) procedureFormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private{ Private declarations } public{ Public declarations } end; varForml: TForml; Implementation {$R *.dfm} // вычерчивает звезду procedureStarLine(x0,y0,r: integer; Canvas: TCanvas); // x0,y0 — координаты центра звезды //r — радиус заезды Var р : array [1.. 11] ofTPoint; // массив координат лучей и впадин a: integer; // угол между осью ОХ и прямой, соединяющей // центр звезды и конец луча или впадину i: integer; Begin а := 18; // строим от правого гор. луча fori:=l to10 do begin if(i mod2=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; // нажатие кнопки мыши procedureTForm1.FormMouseDown(Sender:TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin ifButton = mbLeft // нажата левая кнопка? thenForm1.Canvas.Pen.Color : = clRed elseForm1.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 вычерчивает прямоугольник со скругленными углами procedureTForm1.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, вычерчивает треугольник: procedureTForm1.Button2Click(Sender: TObject); Var pol: array[1..3] ofTPoint; // координаты точек треугольника 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; Просмотров: 727; Нарушение авторского права страницы