Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



Линия

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

где:

  • объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;
  • 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 вычерчивает прямоугольник со скругленными углами

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)

где:

  • 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.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-03-15; Просмотров: 1190; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.04 с.)
Главная | Случайная страница | Обратная связь