Линия
Компонент.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)
где:
- объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;
- x1, y1, х2, у2 — координаты прямоугольника, внутри которого вычерчивается эллипс или, если прямоугольник является квадратом, окружность (рис. 10.6).
Рис. 10.6. Значения параметров метода Ellipse определяют вид геометрической фигуры
Дуга
Объект.Canvas.Arc(x1,y1,х2,у2,х3,у3,х4,у4)
где:
- x1, y1, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является вычерчиваемая дуга;
- х3, у3 — параметры, определяющие начальную точку дуги;
- х4, у4 — параметры, определяющие конечную точку дуги.
Дуга вычерчивается против часовой стрелки от начальной точки к конечной (рис. 10.7).
Рис. 10.7. Значения параметров метода Arc определяют дугу как часть эллипса (окружности)
Прямоугольник
Объект.Canvas.Rectangle(x1,y1,x2,y2)
где:
- объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;
- x1, y1 и х2, у2 — координаты левого верхнего и правого нижнего углов прямоугольника.
Метод RoundRec тоже вычерчивает прямоугольник, но со скругленными углами. Объект.Canvas.RoundRec(x1,y1,х2, у2, х3, у3)
где:
- x1, y1, х2, у2 -- параметры, определяющие положение углов прямоугольника, в который вписывается прямоугольник со скругленными углами;
- х3 и у3 — размер эллипса, одна четверть которого используется для вычерчивания скругленного угла (рис. 10.8).
Рис. 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)
где:
- x1, y1, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является сектор;
- х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.