- Lektsia - бесплатные рефераты, доклады, курсовые работы, контрольные и дипломы для студентов - https://lektsia.info -

Методы вычерчивания графических примитивов



Линия

Компонент.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.